ap2_mandate_verifier 0.1.0.pre.3 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +56 -191
- data/docs/SUPPORT_CONTRACT.md +42 -15
- metadata +5 -5
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: c34a0bd3cd87a6ed543aa7342e48561114dd87962ef7e191f0708818f5bb73f0
|
|
4
|
+
data.tar.gz: 93ac9fdc7ede629a930cdc62937c1261c07dafc4c9c5914fd769a1ed540d5602
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 9d99c2fe1dbb1eb24cb884941e1c4bfccd2b3a8703f70e82777e3f848c134d2c209f2e1e1a1389f978262a08824365f1bbcf0911bd787a119791f9a2fb19e35e
|
|
7
|
+
data.tar.gz: a8d10488368acc7179457c38143cbeb4ac60a8e6ca973591084504c7abee73fd65afe18016d679a7c5a5ef151839db96946dcb1047623e302e2f8423b9e84572
|
data/README.md
CHANGED
|
@@ -1,58 +1,57 @@
|
|
|
1
|
-
# AP2 Mandate Verifier
|
|
1
|
+
# AP2 Mandate Verifier — 0.1.0
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
RubyでAP2の固定profileを検証する、Rails非依存のGemです。**署名の正しさだけで購入を許可しません。** 必要な検査が成立した場合に不変のEvidenceを返し、最終業務判断はHostが行います。
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
stateless verifierです。署名・原Root全域開示・委任・購入原文・Host binding・固定制約・
|
|
7
|
-
有効期間がすべて成立したとき、opt-in `verify_research`が不変な研究Evidence v2を返します。
|
|
8
|
-
**Evidenceは購入許可・nonce消費・決済完了ではありません。**
|
|
5
|
+
A Rails-independent Ruby Gem for a deliberately fixed AP2 verification profile. **A valid signature alone never authorizes a purchase.** Successful checks produce immutable Evidence; the Host makes the final business decision.
|
|
9
6
|
|
|
10
|
-
|
|
11
|
-
GitHubでは固定profile・研究用途限定のpre2を公開済みです。RubyGemsへの公開と、このREADMEを含む新候補の実配布は別の明示承認待ちです。stable release・本番・Phase2-A全面合格・Phase2B・E10全面GOではありません。
|
|
7
|
+
## 配布と導入 / Distribution and installation
|
|
12
8
|
|
|
13
|
-
|
|
14
|
-
USD/EUR/JPY、空links。一般AP2/全Schema/任意Issuerの互換性は保証しません。
|
|
15
|
-
実Issuer/鍵/profile登録・最新性・信頼時計と、最新注文/challenge再照合+原子的nonce消費・
|
|
16
|
-
注文CAS・決済はHost責務です。GemはDB・ネットワーク・支払いを実行しません。
|
|
9
|
+
配布状況は[公式RubyGems版一覧](https://rubygems.org/gems/ap2_mandate_verifier/versions)が正本です。この文書や版情報の存在だけでは公開済みを意味しません。次のコマンドは**0.1.0が公式一覧に掲載された後**に使用します。公開前は未登録エラーになり得ます。旧研究版pre3は別の成果物です。
|
|
17
10
|
|
|
18
|
-
|
|
11
|
+
The [official RubyGems version list](https://rubygems.org/gems/ap2_mandate_verifier/versions) is authoritative for availability. This document and version metadata alone do not establish publication. Use these commands **once0.1.0 is listed**; before publication they may fail because the version is absent. Research prerelease pre3 is a separate artifact.
|
|
19
12
|
|
|
20
|
-
|
|
13
|
+
既存のMRI4.0.9環境と利用者が選ぶGem隔離環境で使用します。通常の導入は依存取得・JSON native buildを伴い得ます。依存衝突や未知providerを許容するために固定条件を緩めないでください。
|
|
21
14
|
|
|
22
|
-
|
|
15
|
+
Use an existing MRI4.0.9 environment and your chosen Gem isolation. Normal installation may fetch dependencies and build JSON native extensions. Stop on conflicts or unknown providers rather than relaxing pins.
|
|
23
16
|
|
|
24
|
-
|
|
17
|
+
```sh
|
|
18
|
+
ruby --version # MRI 4.0.9 required
|
|
19
|
+
gem install ap2_mandate_verifier --version 0.1.0
|
|
20
|
+
```
|
|
25
21
|
|
|
26
|
-
|
|
22
|
+
BundlerのGemfile / Bundler Gemfile:
|
|
27
23
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
| Runtime Gems | `json = 2.19.9`, `jwt = 3.3.0`, `base64 = 0.3.0`, `openssl = 4.0.2`, `digest = 3.2.1` |
|
|
32
|
-
| Native providers | 利用するRuby用のOpenSSL/JSON拡張が必要。Gem本体はnative binaryを含まない / Compatible OpenSSL and JSON extensions are required; this Gem contains no native binaries. |
|
|
33
|
-
| 観測環境 / Observed systems | **pre3実パッケージ:MBA Darwin arm64のみ。pre3のLinux検証は未実施。** Ubuntu24.04 x86_64の成功run39939021098はpre2の歴史証拠であり、pre3の実行証拠ではない / **pre3 package: MBA Darwin arm64 only; pre3 Linux NOT_RUN.** Successful Ubuntu24.04 x86_64 run39939021098 is historical pre2 evidence, not a pre3 execution. No guarantee for every macOS/Linux configuration. |
|
|
24
|
+
```ruby
|
|
25
|
+
gem "ap2_mandate_verifier", "= 0.1.0"
|
|
26
|
+
```
|
|
34
27
|
|
|
35
|
-
|
|
28
|
+
固定runtime依存 / Fixed runtime dependencies:
|
|
29
|
+
JSON2.19.9, JWT3.3.0, base640.3.0, OpenSSL gem4.0.2, Digest3.2.1.
|
|
30
|
+
Bundler4.0.20は既存resolver基準でruntime依存ではありません / Bundler4.0.20 is the observed resolver baseline, not a runtime dependency.
|
|
31
|
+
RubyGemsの版制約だけではMRI engine、OSや実native/providerの出所を保証しません / Gem version constraints alone do not enforce the MRI engine, OS or native-provider provenance.
|
|
36
32
|
|
|
37
|
-
|
|
33
|
+
## 対応範囲 / Supported contract
|
|
38
34
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
35
|
+
- AP2固定source `b4587ac1d055888a73b4b21750973cffba961793`、登録profile `ap2.checkout.single_merchant_sku` v1の正確なbody/hash・7支持形状 / The exact registered profile v1 body/hash and seven supported shapes at the pinned AP2 source.
|
|
36
|
+
- ES256/P256、Open1→Closed1、固定3開示位置、単一Merchant/SKU/行、USD/EUR/JPY、empty links。未知/非対応形式は拒否 / ES256/P256, Open1→Closed1, three fixed disclosure positions, one Merchant/SKU/line, USD/EUR/JPY and empty links; unknown/unsupported forms are rejected.
|
|
37
|
+
- 厳格入力と有限上限、供給trust選択、Root原文署名と全域閉包、Agent/Merchant署名・委任・購入/Host binding、型/制約/期限をGemが検査 / The Gem checks strict bounded inputs, supplied trust selection, signed Root wire and full supported closure, Agent/Merchant signatures, delegation, purchase/Host binding, types, constraints and time.
|
|
38
|
+
- 入口は既存 `verify_research`。名前と `verified_research/scoped_research_verified`・Evidence v2契約を維持。安定版番号でも一般AP2対応やHost許可へ昇格しない / The existing entry, result names and Evidence v2 contract remain unchanged; a stable version does not imply generic AP2 support or Host authorization.
|
|
39
|
+
|
|
40
|
+
正確な必須形状・全上限・失敗codeは[SUPPORT_CONTRACT](docs/SUPPORT_CONTRACT.md)を参照してください。 / See [SUPPORT_CONTRACT](docs/SUPPORT_CONTRACT.md) for exact required shapes, bounds and failure codes.
|
|
41
|
+
|
|
42
|
+
## 環境・互換性・保守 / Environment, compatibility and maintenance
|
|
43
|
+
|
|
44
|
+
対象はMRI4.0.9と固定依存、観測されたMBA/macOS arm64 (`arm64-darwin25`) およびUbuntu24.04/x86_64の正確な構成です。[現行版の包装・provider証拠](research/stable010_release_linux_package/README.md)と[過去の環境記録](docs/VERIFIER_CORE_COMPLETION_CRITERIA.md#初回の対応環境保証範囲owner採用済み)を区別してください。OS全版・他engine/architecture・任意provider更新は保証しません。
|
|
48
45
|
|
|
49
|
-
|
|
46
|
+
The baseline is MRI4.0.9 with fixed dependencies and the exact observed MBA/macOS arm64 and Ubuntu24.04/x86_64 configurations. Distinguish [release-package/provider evidence](research/stable010_release_linux_package/README.md) from [historical environment records](docs/VERIFIER_CORE_COMPLETION_CRITERIA.md#初回の対応環境保証範囲owner採用済み). Other OS versions, engines, architectures and arbitrary provider updates are not covered.
|
|
50
47
|
|
|
51
|
-
|
|
48
|
+
支持入力の判定意味・APIを黙って変更しません。安全性修正で受理を狭める場合は理由・影響・移行を明示し、破壊的なAPI/必須field/profile変更を区別します。依存更新は自動互換ではありません。
|
|
52
49
|
|
|
53
|
-
|
|
50
|
+
Supported-input semantics and APIs do not change silently. Security-driven narrowing identifies reason, impact and migration; breaking API/required-field/profile changes are explicit. Dependency updates are not automatically compatible.
|
|
54
51
|
|
|
55
|
-
|
|
52
|
+
初回安定系列の最新修正版のみを保守対象とし、月次・関連勧告判明時・次版前に手動確認します。旧版backport・固定保守年数・受付/修正期限・24時間対応は約束しません。[SECURITY](SECURITY.md)と[保守方針](docs/POST_RELEASE_MAINTENANCE.md)を参照し、秘密鍵・実Mandate・個人情報を報告しないでください。
|
|
53
|
+
|
|
54
|
+
Maintenance covers the latest patch in the initial stable series, with manual monthly/advisory/pre-release review. No old-series backport, fixed support term, response/fix deadline or24/7 promise. See [SECURITY](SECURITY.md) and [maintenance](docs/POST_RELEASE_MAINTENANCE.md); never report private keys, real Mandates or personal data.
|
|
56
55
|
|
|
57
56
|
## 保存済み合成入力で試す / Try the saved synthetic example
|
|
58
57
|
|
|
@@ -94,10 +93,10 @@ result = AP2MandateVerifier.verify_research(**inputs)
|
|
|
94
93
|
puts "status=#{result.status} code=#{result.code}"
|
|
95
94
|
if result.success?
|
|
96
95
|
checked_facts = result.evidence.to_h # Detached, deeply frozen in-process facts.
|
|
97
|
-
puts "
|
|
96
|
+
puts "Scoped verification succeeded; this is NOT purchase authorization."
|
|
98
97
|
# No payment, order update or nonce consumption is performed here.
|
|
99
98
|
else
|
|
100
|
-
raise "
|
|
99
|
+
raise "Verification did not succeed; stop."
|
|
101
100
|
end
|
|
102
101
|
```
|
|
103
102
|
|
|
@@ -125,6 +124,10 @@ See [SUPPORT_CONTRACT](docs/SUPPORT_CONTRACT.md#full-entry-and-required-inputs)
|
|
|
125
124
|
|
|
126
125
|
A successful `verify_research` result establishes scoped verification facts. The Host still must recheck latest trust/revocation/order version/challenge/time and atomically consume the nonce with order CAS. The Gem does not perform those operations. Serializing Evidence to JSON does not preserve or reconstruct authenticity through this API. Legacy `verify(presentation_json:)` checks only the JSON syntax boundary and never returns successful Evidence.
|
|
127
126
|
|
|
127
|
+
連携前に[Issuer登録前チェックリスト](docs/ISSUER_ONBOARDING_CHECKLIST.md)と[Issuer/Host最小契約](docs/ISSUER_HOST_MINIMUM_CONTRACT.md)を参照してください。実Issuerの信頼と特定Hostの本番運用GOは、このGemの版番号や検証成功では成立しません。契約と`research/`のHost/DBコードは合成研究の設計・限定観測であり、本番adapterとして提供するものではありません。
|
|
128
|
+
|
|
129
|
+
Before integration, consult the [Issuer onboarding checklist](docs/ISSUER_ONBOARDING_CHECKLIST.md) and [Issuer/Host minimum contract](docs/ISSUER_HOST_MINIMUM_CONTRACT.md). Real-Issuer trust and a specific Host's production GO are not established by this Gem version or verification success. The contract and Host/DB code under `research/` describe synthetic research designs and limited observations, not a production adapter.
|
|
130
|
+
|
|
128
131
|
`inputs`はtrust_json/selection_json/host_json/root_presentation/terminal_jws/
|
|
129
132
|
host_checkout_jws/verified_atです。前3つのJSONは認証済みの独立Host入力として渡し、
|
|
130
133
|
提示tokenの自己申告から信頼を追加しません。raw nonceは入力専用、EvidenceにはSHA256だけを
|
|
@@ -133,168 +136,30 @@ host_checkout_jws/verified_atです。前3つのJSONは認証済みの独立Host
|
|
|
133
136
|
旧`verify`はJSON構文境界だけで、その他の低レベルverify入口と共にsuccess?=false/
|
|
134
137
|
evidence=nilを維持します。呼出し例のsuccess?を旧APIへ流用してはいけません。
|
|
135
138
|
|
|
136
|
-
##
|
|
139
|
+
## 非保証と安全な停止 / Exclusions and safe stopping
|
|
137
140
|
|
|
138
|
-
|
|
139
|
-
以下のMBA409ランタイム導入・885回帰と後続Linuxの記録はpre2の歴史証拠です。pre3の包装/導入観測とは分けて扱います。
|
|
140
|
-
The MBA409 runtime/885-regression records and subsequent Linux run below are historical pre2 evidence, separate from pre3 package/install observations.
|
|
141
|
+
一般AP2/全Schema、任意の実Issuer互換性、発行/提示/Receipt生成、Rails adapter、実決済、実Host/DB/失効運用、最悪CPU/RSS/並行性能・数値SLAは対象外です。無欠陥や全パス安全性を証明したとは主張しません。既知重大問題やGem自身の検査欠落をこの非保証表示で補いません。
|
|
141
142
|
|
|
142
|
-
|
|
143
|
-
Rubyの任意DTrace/USDT診断プローブは公式--disable-dtrace構成で無効です。今回の記録は`MBA409-20261023-BUILD01`(configure中の一時ファイル競合で監視停止)、`BUILD02`(導入成功)、`VALIDATION01`(新ランタイムの885回帰)、`PACKAGE01`(元の包装・導入検査)、`PACKAGE02`(証拠参照訂正後の包装・導入検査)として区別します。対応するローカルreport/source manifestは[契約文書の証拠識別表](docs/SUPPORT_CONTRACT.md#evidence-identifiers-for-this-runtime-update)を参照してください。旧MBA408・Ruby4.0.1の結果は別の歴史証拠です。包装時点ではLinux4.0.9は未実施でした。その後[run39939021098 attempt1](https://github.com/cuichangquan/ap2-mandate-verifier/actions/runs/39939021098)で885回帰・installed52・13payload/10loadedが合格し、MBAとpayload/依存metadataが一致しました。これは保存MBA期待値の再入力であり、Linuxで独立Oracleを再実行したものではありません。Ubuntu実ロードlibssl/libcryptoは`libssl3t64:amd64 3.0.13-0ubuntu3.16`の所有権・整合性まで確認しています。
|
|
144
|
-
The packaged pre2 documents describe the MBA packaging snapshot. Subsequent [Linux run39939021098 attempt1](https://github.com/cuichangquan/ap2-mandate-verifier/actions/runs/39939021098) passed885 source and52 installed checks,13 payload/10 loaded identities, with MBA payload/dependency metadata matching. These replayed saved MBA expectations; the Linux independent Oracle was not rerun. Actual mapped Ubuntu libraries were owned by verified `libssl3t64:amd64 3.0.13-0ubuntu3.16`. The attached Gem and tag remain unchanged.
|
|
143
|
+
General AP2/full Schema, arbitrary real-Issuer interoperability, issuance/presentation/Receipt generation, Rails adapters, real payments/Host/DB/revocation operations, worst CPU/RSS/concurrency and numerical SLAs are outside scope. No defect-free/all-path safety proof is claimed; exclusions do not excuse known major defects or missing Gem checks.
|
|
145
144
|
|
|
146
|
-
|
|
147
|
-
ライブラリのwall-clock/RSS/並行数上限はなく、Hostが運用上の制限を設ける必要があります。
|
|
145
|
+
Hostはtokenから独立した認証済みtrust/鍵/profile・最新失効/時計/注文/challengeを供給し、Evidence使用直前に再照合し、nonce原子消費+注文CAS・PENDING回復・最終ALLOWを担当します。Gemの既存検査をHostへ移す意味ではありません。Evidenceは同一の信頼Rubyプロセス内の検査事実で、JSON/Hashから真正性を再構成しません。不明・拒否・不能・例外・結果なしは許可せず、Hostが外側の時間/メモリ/同時実行制限を設けます。
|
|
148
146
|
|
|
149
|
-
|
|
150
|
-
Ubuntu24.04 x86_64で885回帰・42固定入力の再現を観測しました。
|
|
151
|
-
[Linux run39774818984](https://github.com/cuichangquan/ap2-mandate-verifier/actions/runs/39774818984)は
|
|
152
|
-
MBA独立期待値30+境界12のGem再入力であり、Linux Oracle再実行ではありません。
|
|
153
|
-
8Schema対照はMBA根拠です。これらは後にGitHub公開した0.1.0.pre.2の包装/導入結果とは別の観測で、
|
|
154
|
-
旧manifest/pin/結果は更新していません。候補の新結果はローカル別保存、配布物には含めません。
|
|
147
|
+
The Host supplies authenticated token-independent trust/keys/profile and current revocation/clock/order/challenge state, rechecks before use, atomically consumes nonce with order CAS, reconciles PENDING and decides ALLOW. Existing Gem checks remain Gem responsibilities. Evidence is in-process checked facts in trusted Ruby, not a transport credential. Unknown/rejected/unavailable/exception/missing results never authorize; the Host provides outer time/memory/concurrency limits.
|
|
155
148
|
|
|
156
|
-
|
|
157
|
-
研究資料はresearch/配下へ整理済みです。独自runtime/supervisorの開発へ戻りません。
|
|
149
|
+
## 証拠と履歴 / Evidence and history
|
|
158
150
|
|
|
159
|
-
|
|
151
|
+
現在の新archiveのSHA・環境別結果・制限は[版別検証記録](research/stable010_release_linux_package/README.md)を参照してください。archiveのSHAを同梱文書へ自己埋込せず、外部manifestで識別します。SHAは配布bytesを識別するもので、Host trustや全面安全性を保証しません。
|
|
160
152
|
|
|
161
|
-
|
|
153
|
+
See the [versioned validation record](research/stable010_release_linux_package/README.md) for this archive's external SHA, per-environment observations and limits. The archive hash is kept outside its payload to avoid self-reference. A hash identifies bytes, not Host trust or global safety.
|
|
162
154
|
|
|
163
|
-
|
|
164
|
-
配布Gemには研究コード・fixture・図・過去結果を含めません。リンク先はリポジトリ上の資料です。
|
|
155
|
+
[旧0.1.0候補R1](research/stable010_candidate/README.md)、[公開pre3](https://rubygems.org/gems/ap2_mandate_verifier/versions/0.1.0.pre.3)、[pre2 Release](https://github.com/cuichangquan/ap2-mandate-verifier/releases/tag/v0.1.0.pre.2)は別archiveです。旧NOT_RUN/停止/成功は各時点の記録として保持し、新archiveの実測へ読み替えません。885回帰(147は内数)と旧Ruby4.0.1独立比較の再利用は、新たな885実行やLinux独立Oracleを意味しません。
|
|
165
156
|
|
|
166
|
-
|
|
157
|
+
[Earlier0.1.0 candidateR1](research/stable010_candidate/README.md), [publishedpre3](https://rubygems.org/gems/ap2_mandate_verifier/versions/0.1.0.pre.3) and [pre2 Release](https://github.com/cuichangquan/ap2-mandate-verifier/releases/tag/v0.1.0.pre.2) are different archives. Historical NOT_RUN/stops/passes remain tied to their original bytes and time. Reusing885 regressions (including147) and Ruby4.0.1 independent comparisons is not a fresh885 run or Linux independent Oracle.
|
|
167
158
|
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
手書きの学習用図解です。概念を理解するための資料であり、仕様の正式な要件は [AP2 v0.2 仕様基準点](https://github.com/cuichangquan/ap2-mandate-verifier/blob/8d9845ff4b5618b9e57eda86d3a1e447d4124b47/docs/SPEC_BASELINE.md) を参照してください。
|
|
171
|
-
|
|
172
|
-
**まずは全体像**
|
|
173
|
-
|
|
174
|
-
- [① AP2規格の全体像](https://github.com/cuichangquan/ap2-mandate-verifier/blob/8d9845ff4b5618b9e57eda86d3a1e447d4124b47/docs/assets/ap2-overview.png)
|
|
175
|
-
- [② AP2の委任フローと信頼検証](https://github.com/cuichangquan/ap2-mandate-verifier/blob/8d9845ff4b5618b9e57eda86d3a1e447d4124b47/docs/assets/ap2-delegation-trust-flow.png)
|
|
176
|
-
|
|
177
|
-
**次に内部構造と安全性**
|
|
178
|
-
|
|
179
|
-
- [③ Mandateの内部構造](https://github.com/cuichangquan/ap2-mandate-verifier/blob/8d9845ff4b5618b9e57eda86d3a1e447d4124b47/docs/assets/mandate-anatomy.png)
|
|
180
|
-
- [④ SD-JWTと委任チェーンの仕組み](https://github.com/cuichangquan/ap2-mandate-verifier/blob/8d9845ff4b5618b9e57eda86d3a1e447d4124b47/docs/assets/sd-jwt-delegation-chain.png)
|
|
181
|
-
- [⑤ 攻撃パターンとFail Closed](https://github.com/cuichangquan/ap2-mandate-verifier/blob/8d9845ff4b5618b9e57eda86d3a1e447d4124b47/docs/assets/attack-patterns-fail-closed.png)
|
|
182
|
-
|
|
183
|
-

|
|
184
|
-
|
|
185
|
-
## Why?
|
|
186
|
-
|
|
187
|
-
A future personal AI could arrive at a web service carrying evidence of authority granted by a person, without that person pre-configuring every service. **A self-declared permission is not proof of authority.** The service needs verifiable evidence, an explicit trust policy, and its own final authorization decision.
|
|
188
|
-
|
|
189
|
-
This project explores **AP2 v0.2 Checkout Mandate verification in Ruby**, initially on the merchant/verifier side, to see whether a small reusable Ruby Gem is justified.
|
|
190
|
-
|
|
191
|
-
```text
|
|
192
|
-
Human user -- trusted consent/mandate --> Personal AI
|
|
193
|
-
|
|
|
194
|
-
| presents external mandate
|
|
195
|
-
v
|
|
196
|
-
Ruby service
|
|
197
|
-
|
|
|
198
|
-
[AP2 Mandate Verifier]
|
|
199
|
-
|
|
|
200
|
-
verified evidence / verification failure
|
|
201
|
-
|
|
|
202
|
-
Service's own authorization and controls
|
|
203
|
-
|
|
|
204
|
-
Business action or STOP
|
|
205
|
-
```
|
|
206
|
-
|
|
207
|
-
A valid digital signature does **not** by itself establish that this Agent is authorized for this specific user, operation, merchant, price, or moment.
|
|
208
|
-
|
|
209
|
-
## Proposed initial scope
|
|
210
|
-
|
|
211
|
-
- Study AP2 **v0.2** Agent Authorization and Checkout Mandate; do not mix in the earlier v0.1 model.
|
|
212
|
-
- Explore cryptographic verification, trusted issuer/keys, holder/Agent binding, transaction binding, Open/Closed mandate constraints, audience, time, and failure cases.
|
|
213
|
-
- Compare behavior and test vectors with the official AP2 Python implementation before claiming interoperability.
|
|
214
|
-
- Expose verified evidence to the **host**; do not replace the host's authorization or payment controls.
|
|
215
|
-
- The fixed-profile pre2 Gem is published as a GitHub research prerelease. RubyGems publication and distribution of a revised candidate require separate approval; production remains HOLD.
|
|
216
|
-
|
|
217
|
-
## Explicit non-goals
|
|
218
|
-
|
|
219
|
-
- Building a wallet, user credential issuer, payment processor, trusted consent UI, Personal AI, MCP server, or A2A transport.
|
|
220
|
-
- Supporting all AP2 flows or production payments in the first iteration.
|
|
221
|
-
- Assuming all unknown issuers or self-asserted permissions are trustworthy.
|
|
222
|
-
- Changing ActingFor Core, ActingFor Shopping Demo or a2a-rails.
|
|
223
|
-
|
|
224
|
-
## Research documentation
|
|
225
|
-
|
|
226
|
-
- [Project scope and design decisions — Japanese](https://github.com/cuichangquan/ap2-mandate-verifier/blob/8d9845ff4b5618b9e57eda86d3a1e447d4124b47/docs/PROJECT.md)
|
|
227
|
-
- [Official AP2 sources and standards watchlist](https://github.com/cuichangquan/ap2-mandate-verifier/blob/8d9845ff4b5618b9e57eda86d3a1e447d4124b47/docs/OFFICIAL_SOURCES.md)
|
|
228
|
-
- [AP2 v0.2 frozen specification and Python SDK baseline](https://github.com/cuichangquan/ap2-mandate-verifier/blob/8d9845ff4b5618b9e57eda86d3a1e447d4124b47/docs/SPEC_BASELINE.md)
|
|
229
|
-
- [AP2 Checkout Mandate verifier requirements and trust boundaries (P0-2)](https://github.com/cuichangquan/ap2-mandate-verifier/blob/8d9845ff4b5618b9e57eda86d3a1e447d4124b47/docs/VERIFIER_REQUIREMENTS.md)
|
|
230
|
-
- [Official Python SDK and Ruby ecosystem research (P0-3)](https://github.com/cuichangquan/ap2-mandate-verifier/blob/8d9845ff4b5618b9e57eda86d3a1e447d4124b47/docs/ECOSYSTEM_RESEARCH.md)
|
|
231
|
-
- [Minimal Checkout Verifier public API proposal — design only (P0-4)](https://github.com/cuichangquan/ap2-mandate-verifier/blob/8d9845ff4b5618b9e57eda86d3a1e447d4124b47/docs/API_PROPOSAL.md)
|
|
232
|
-
- [Phase 0 research decision — initial HOLD, **P0-5b CONDITIONAL GO for a narrow offline PoC only**](https://github.com/cuichangquan/ap2-mandate-verifier/blob/8d9845ff4b5618b9e57eda86d3a1e447d4124b47/docs/RESEARCH_DECISION.md)
|
|
233
|
-
- [Python baseline verification — P0-5a: official pytest 186 PASS / 2 FAIL, signed negative probes 12 PASS (plus earlier isolated 11 PASS)](https://github.com/cuichangquan/ap2-mandate-verifier/blob/8d9845ff4b5618b9e57eda86d3a1e447d4124b47/docs/PYTHON_BASELINE_VERIFICATION.md)
|
|
234
|
-
- [Minimal Fail Closed Profile — strict two-hop autonomous Checkout and Host trust gates (P0-5b)](https://github.com/cuichangquan/ap2-mandate-verifier/blob/8d9845ff4b5618b9e57eda86d3a1e447d4124b47/docs/FAIL_CLOSED_PROFILE.md)
|
|
235
|
-
- [Ruby interoperability feasibility — P1-0 ES256/JWK + Checkout Hash + official schema: 14 PASS](https://github.com/cuichangquan/ap2-mandate-verifier/blob/8d9845ff4b5618b9e57eda86d3a1e447d4124b47/docs/RUBY_FEASIBILITY_SPIKE.md)
|
|
236
|
-
- [Ruby SD-JWT Root & Disclosure — P1-1 pinned Python SDK issuance, hidden constraint fail closed: 10 PASS](https://github.com/cuichangquan/ap2-mandate-verifier/blob/8d9845ff4b5618b9e57eda86d3a1e447d4124b47/docs/RUBY_SDJWT_RESEARCH.md)
|
|
237
|
-
- [Ruby two-hop delegation — P1-2 pinned Python signed Open→Closed, cnf/sd_hash/aud/nonce: 15 PASS](https://github.com/cuichangquan/ap2-mandate-verifier/blob/8d9845ff4b5618b9e57eda86d3a1e447d4124b47/docs/RUBY_DELEGATION_SPIKE.md)
|
|
238
|
-
- [Ruby Merchant Checkout binding — P1-3 signed Checkout JWT, Host exact bytes, hash, restricted merchant/SKU/quantity/amount: 18 PASS](https://github.com/cuichangquan/ap2-mandate-verifier/blob/8d9845ff4b5618b9e57eda86d3a1e447d4124b47/docs/RUBY_CHECKOUT_BINDING_SPIKE.md)
|
|
239
|
-
- [Security Gap Review — P1-4 12 ranked risks, 6 gates, generic Gem implementation HOLD](https://github.com/cuichangquan/ap2-mandate-verifier/blob/8d9845ff4b5618b9e57eda86d3a1e447d4124b47/docs/SECURITY_GAP_REVIEW.md)
|
|
240
|
-
- [Signed Security Negative Observations — P1-5 18 probes, **6 RED / 11 GREEN / 1 Host boundary**](https://github.com/cuichangquan/ap2-mandate-verifier/blob/8d9845ff4b5618b9e57eda86d3a1e447d4124b47/docs/SECURITY_NEGATIVE_TESTS.md)
|
|
241
|
-
- [Security Hardening Research — P1-6 fixed six prior REDs: **0 RED, 17 GREEN, 43 historical regressions passed**](https://github.com/cuichangquan/ap2-mandate-verifier/blob/8d9845ff4b5618b9e57eda86d3a1e447d4124b47/docs/SECURITY_HARDENING_RESEARCH.md)
|
|
242
|
-
- [Host Security Contract — P1-7 Host trust, VerifiedEvidence vs ALLOW, nonce atomicity, revocation and Receipt (design only)](https://github.com/cuichangquan/ap2-mandate-verifier/blob/8d9845ff4b5618b9e57eda86d3a1e447d4124b47/docs/HOST_SECURITY_CONTRACT.md)
|
|
243
|
-
- [Host Security Test Plan — P1-7 34 planned race, trust, context and Receipt cases (NOT run)](https://github.com/cuichangquan/ap2-mandate-verifier/blob/8d9845ff4b5618b9e57eda86d3a1e447d4124b47/docs/HOST_SECURITY_TEST_PLAN.md)
|
|
244
|
-
- [Host Replay Lab Design — P1-8 PostgreSQL 16, two workers, crash/retry test plan (DESIGN ONLY, NOT RUN)](https://github.com/cuichangquan/ap2-mandate-verifier/blob/8d9845ff4b5618b9e57eda86d3a1e447d4124b47/docs/HOST_REPLAY_LAB_DESIGN.md)
|
|
245
|
-
- [Host Replay PG16 Evidence — P1-9a four isolated Host DB cases PASS; remaining 30 NOT RUN](https://github.com/cuichangquan/ap2-mandate-verifier/blob/8d9845ff4b5618b9e57eda86d3a1e447d4124b47/docs/HOST_REPLAY_P19A_EVIDENCE.md)
|
|
246
|
-
- [Host Crash Recovery Evidence — P1-9b HR04/HR05 real SIGKILL and durable PG recovery; 6/34 Host cases exercised](https://github.com/cuichangquan/ap2-mandate-verifier/blob/8d9845ff4b5618b9e57eda86d3a1e447d4124b47/docs/HOST_REPLAY_P19B_EVIDENCE.md)
|
|
247
|
-
- [Host Unknown COMMIT / Mock Provider Evidence — P1-9c HR06/HR07 offline only, 8/34 Host cases executed](https://github.com/cuichangquan/ap2-mandate-verifier/blob/8d9845ff4b5618b9e57eda86d3a1e447d4124b47/docs/HOST_REPLAY_P19C_EVIDENCE.md)
|
|
248
|
-
- [Host Checkout/Revocation Race — P1-10a HR10 four PG16 interleavings PASS; 9/34 Host case IDs (research only)](https://github.com/cuichangquan/ap2-mandate-verifier/blob/8d9845ff4b5618b9e57eda86d3a1e447d4124b47/docs/HOST_REPLAY_P110A_EVIDENCE.md)
|
|
249
|
-
- [HC06 External Revocation Design — P1-10b authority consistency, TOCTOU and negative tests (design only, NOT RUN)](https://github.com/cuichangquan/ap2-mandate-verifier/blob/8d9845ff4b5618b9e57eda86d3a1e447d4124b47/docs/HOST_EXTERNAL_REVOCATION_HC06_DESIGN.md)
|
|
250
|
-
- [HC06 Offline Synthetic Evidence — P1-10c eight model tests, two expected unsafe counterexamples; not a full HC06 proof](https://github.com/cuichangquan/ap2-mandate-verifier/blob/8d9845ff4b5618b9e57eda86d3a1e447d4124b47/docs/HOST_EXTERNAL_REVOCATION_P110C_EVIDENCE.md)
|
|
251
|
-
- [HC06 Cross-Service Protocol Design — P1-10d Authority reservations, durable Host COMMIT, revocation timing and failure matrix (DESIGN ONLY)](https://github.com/cuichangquan/ap2-mandate-verifier/blob/8d9845ff4b5618b9e57eda86d3a1e447d4124b47/docs/HOST_EXTERNAL_REVOCATION_P110D_PROTOCOL.md)
|
|
252
|
-
- [HC06 Independent Failure-Injection Test Plan — P1-10e revocation during reservation, unknown COMMIT, reservation timeout (DESIGN ONLY, NOT RUN)](https://github.com/cuichangquan/ap2-mandate-verifier/blob/8d9845ff4b5618b9e57eda86d3a1e447d4124b47/docs/HOST_EXTERNAL_REVOCATION_P110E_TEST_PLAN.md)
|
|
253
|
-
- [HC06 Minimal Independent Harness Decision — P1-10f E-R01/R02 local two-process/two-PG16 feasibility assessment (DESIGN ONLY, NOT RUN)](https://github.com/cuichangquan/ap2-mandate-verifier/blob/8d9845ff4b5618b9e57eda86d3a1e447d4124b47/docs/HOST_EXTERNAL_REVOCATION_P110F_HARNESS_DECISION.md)
|
|
254
|
-
- [HC06 Independent PG16 Synthetic Evidence — P1-10g E-R01/R02 2 runs / 118 assertions, Host abort SIGKILL; distributed HC06 HOLD](https://github.com/cuichangquan/ap2-mandate-verifier/blob/8d9845ff4b5618b9e57eda86d3a1e447d4124b47/docs/HOST_EXTERNAL_REVOCATION_P110G_EVIDENCE.md)
|
|
255
|
-
- [HC06 Authority Finalize Proof-Boundary Review — P1-10h trusted Host decision, forged/replayed reports and PENDING on uncertainty (DESIGN ONLY, NOT RUN)](https://github.com/cuichangquan/ap2-mandate-verifier/blob/8d9845ff4b5618b9e57eda86d3a1e447d4124b47/docs/HOST_EXTERNAL_REVOCATION_P110H_PROOF_BOUNDARY_REVIEW.md)
|
|
256
|
-
- [HC06 Synthetic Authority Evidence Negatives — P1-10i H01 unsafe baseline + guarded STOP, H02–H06 limited checks (6 runs / 178 assertions, distributed HC06 HOLD)](https://github.com/cuichangquan/ap2-mandate-verifier/blob/8d9845ff4b5618b9e57eda86d3a1e447d4124b47/docs/HOST_EXTERNAL_REVOCATION_P110I_EVIDENCE.md)
|
|
257
|
-
- [HC06 Independent Authority Proof Feasibility Decision — P1-10j no direct Host DB, authenticated durable decision prerequisites, anti-rollback and Fail Closed (DESIGN ONLY)](https://github.com/cuichangquan/ap2-mandate-verifier/blob/8d9845ff4b5618b9e57eda86d3a1e447d4124b47/docs/HOST_EXTERNAL_REVOCATION_P110J_DECISION.md)
|
|
258
|
-
- [HC06 Host–Authority Contract Checklist — P1-10k C01–C12 roles, evidence required, hard STOP gates; all OPEN/UNCONFIRMED (DESIGN ONLY)](https://github.com/cuichangquan/ap2-mandate-verifier/blob/8d9845ff4b5618b9e57eda86d3a1e447d4124b47/docs/HOST_EXTERNAL_REVOCATION_P110K_CONTRACT_CHECKLIST.md)
|
|
259
|
-
- [AP2 v0.2.0 Official Spec/SDK Mapping — P1-10l C01–C12 vs Mandate, Checkout, Receipt (fixed SHA; SUPPORTED vs NOT SPECIFIED vs UNKNOWN; READ-ONLY)](https://github.com/cuichangquan/ap2-mandate-verifier/blob/8d9845ff4b5618b9e57eda86d3a1e447d4124b47/docs/HOST_EXTERNAL_REVOCATION_P110L_AP2_SPEC_MAPPING.md)
|
|
260
|
-
- [Verifier vs Host/Authority Revocation — P1-10m scope and GO/HOLD gates (A: cryptographic evidence; B: strong HC06 revocation; DESIGN ONLY)](https://github.com/cuichangquan/ap2-mandate-verifier/blob/8d9845ff4b5618b9e57eda86d3a1e447d4124b47/docs/VERIFIER_VS_REVOCATION_P110M_SCOPE.md)
|
|
261
|
-
- [Strict A-only Offline Ruby PoC GO/HOLD Reassessment — P1-10n G01–G08 and 8 planned acceptance cases, unrun at that step (DESIGN ONLY)](https://github.com/cuichangquan/ap2-mandate-verifier/blob/8d9845ff4b5618b9e57eda86d3a1e447d4124b47/docs/VERIFIER_P110N_OFFLINE_POC_GATE.md)
|
|
262
|
-
- [A-only Signed Offline Acceptance — P1-10o AN-P01/AN-N01–N07 (8 runs / 45 assertions, signed claim drift rejected, N07 HOST_BOUNDARY; SYNTHETIC ONLY)](https://github.com/cuichangquan/ap2-mandate-verifier/blob/8d9845ff4b5618b9e57eda86d3a1e447d4124b47/docs/VERIFIER_P110O_EVIDENCE.md)
|
|
263
|
-
- [A-only Verifier Residual Gap Review — P1-10p issuer layout, unknown nested Constraint fields and GP01–GP09 priorities (DESIGN ONLY / all new tests NOT RUN at P1-10p)](https://github.com/cuichangquan/ap2-mandate-verifier/blob/8d9845ff4b5618b9e57eda86d3a1e447d4124b47/docs/VERIFIER_P110P_RESIDUAL_GAPS.md)
|
|
264
|
-
- [GP01 Signed Unknown Nested Constraint — P1-10q historic pre-fix unexpected ACCEPT / RED-HOLD (1 synthetic run / 8 assertions)](https://github.com/cuichangquan/ap2-mandate-verifier/blob/8d9845ff4b5618b9e57eda86d3a1e447d4124b47/docs/VERIFIER_P110Q_GP01_EVIDENCE.md)
|
|
265
|
-
- [GP01 Fixed-Issuer Nested Constraint Allowlist — P1-10r: historic RED to bounded REJECT + signed positive, dedicated 2 runs / 10 assertions (RESEARCH ONLY)](https://github.com/cuichangquan/ap2-mandate-verifier/blob/8d9845ff4b5618b9e57eda86d3a1e447d4124b47/docs/VERIFIER_P110R_GP01_FIX_EVIDENCE.md)
|
|
266
|
-
- [Signed Constraint Shape and Value-Type Residual Gaps — P1-10s: S01–S08, including requirement ID and Merchant name types (DESIGN ONLY, all new cases NOT RUN)](https://github.com/cuichangquan/ap2-mandate-verifier/blob/8d9845ff4b5618b9e57eda86d3a1e447d4124b47/docs/VERIFIER_P110S_CONSTRAINT_SHAPE_TYPE_GAPS.md)
|
|
267
|
-
- [S01 Signed Requirement ID Type Mismatch — P1-10t: latest corrected observer local Docker signature VALID, official Schema INVALID, Ruby ACCEPT / RED-HOLD (1 run / 6 assertions; earlier 1/7 historical; no CI)](https://github.com/cuichangquan/ap2-mandate-verifier/blob/8d9845ff4b5618b9e57eda86d3a1e447d4124b47/docs/VERIFIER_P110T_S01_PREPARED_NOT_RUN.md)
|
|
268
|
-
- [P1-10u signed S01 String type check + separate signed positive regression — PR #42, Mac Docker 2 runs / 12 assertions / 0 failures: signed S01 exact-type REJECT and known-good evidence-only ACCEPT; dedicated CI NOT RUN, general Gem/production HOLD](https://github.com/cuichangquan/ap2-mandate-verifier/blob/8d9845ff4b5618b9e57eda86d3a1e447d4124b47/docs/VERIFIER_P110U_S01_TYPE_FIX_PREPARED_NOT_RUN.md)
|
|
269
|
-
- [Research phases and release gates](https://github.com/cuichangquan/ap2-mandate-verifier/blob/8d9845ff4b5618b9e57eda86d3a1e447d4124b47/docs/RESEARCH_PLAN.md)
|
|
270
|
-
- [Phase 1研究総括とPhase 2-A設計GO/HOLD判断 — 当時の引き継ぎ記録 / Historical handoff](https://github.com/cuichangquan/ap2-mandate-verifier/blob/8d9845ff4b5618b9e57eda86d3a1e447d4124b47/docs/PHASE1_RESEARCH_CLOSURE_PHASE2_GATE.md)
|
|
271
|
-
- [Phase 2-A 最小Merchant Verifier設計パッケージ — Issue #45 / PROPOSED / DESIGN ONLY / 未実装・新規テストNOT RUN](https://github.com/cuichangquan/ap2-mandate-verifier/blob/8d9845ff4b5618b9e57eda86d3a1e447d4124b47/docs/PHASE2A_MINIMAL_VERIFIER_DESIGN.md)
|
|
272
|
-
- [Phase 2-A Issuer/SD-JWT権限制約の開示完全性Gate — Issue #47 / DESIGN ONLY / 未検証・Phase 2-B HOLD](https://github.com/cuichangquan/ap2-mandate-verifier/blob/8d9845ff4b5618b9e57eda86d3a1e447d4124b47/docs/PHASE2A_DISCLOSURE_COMPLETENESS_GATE.md)
|
|
273
|
-
- [Phase 2-A DC01–DC05 独立署名オラクル実験計画 — Issue #47 / DESIGN ONLY / 全ケースNOT RUN](https://github.com/cuichangquan/ap2-mandate-verifier/blob/8d9845ff4b5618b9e57eda86d3a1e447d4124b47/docs/PHASE2A_DC01_DC05_SIGNED_ORACLE_PLAN.md)
|
|
274
|
-
- [Historical P1-10u signed S01 fixed-observer evidence and completed local Docker 2/12 (merged PR #42)](https://github.com/cuichangquan/ap2-mandate-verifier/blob/8d9845ff4b5618b9e57eda86d3a1e447d4124b47/docs/VERIFIER_P110U_S01_TYPE_FIX_PREPARED_NOT_RUN.md)
|
|
275
|
-
- [Historical P1-10t new-chat handoff — proposes P1-10u and is now superseded; do not rerun as current instructions](https://github.com/cuichangquan/ap2-mandate-verifier/blob/8d9845ff4b5618b9e57eda86d3a1e447d4124b47/docs/VERIFIER_P110T_S01_PREPARED_NOT_RUN.md#5-新チャット引き継ぎ次の作業2026-10-12)
|
|
276
|
-
- [Historical project-wide handoff — Japanese (P1-10r era; P1-10s next-task text not yet updated)](https://github.com/cuichangquan/ap2-mandate-verifier/blob/8d9845ff4b5618b9e57eda86d3a1e447d4124b47/docs/HANDOFF.md)
|
|
277
|
-
- [Trust model and security boundaries](https://github.com/cuichangquan/ap2-mandate-verifier/blob/8d9845ff4b5618b9e57eda86d3a1e447d4124b47/docs/SECURITY_BOUNDARY.md)
|
|
278
|
-
|
|
279
|
-
## Primary official references
|
|
280
|
-
|
|
281
|
-
- [AP2 Specification](https://ap2-protocol.org/ap2/specification/)
|
|
282
|
-
- [AP2 Agent Authorization](https://ap2-protocol.org/ap2/agent_authorization/)
|
|
283
|
-
- [AP2 Checkout Mandate](https://ap2-protocol.org/ap2/checkout_mandate/)
|
|
284
|
-
- [AP2 official source / Python SDK](https://github.com/google-agentic-commerce/AP2)
|
|
285
|
-
- [FIDO Alliance Agentic AI initiative](https://fidoalliance.org/fido-alliance-agentic-ai/)
|
|
286
|
-
|
|
287
|
-
## Relationship to other OSS
|
|
288
|
-
|
|
289
|
-
- [ActingFor](https://github.com/cuichangquan/acting_for): Rails-native delegated authorization using host-resolved identities and locally stored delegations.
|
|
290
|
-
- [a2a-rails](https://github.com/cuichangquan/a2a-rails): A2A protocol integration for Rails. It does not verify AP2 Mandates.
|
|
291
|
-
|
|
292
|
-
Both are **separate projects**. Integration comes after the verification contract is proven.
|
|
293
|
-
|
|
294
|
-
## 日本語
|
|
295
|
-
|
|
296
|
-
分身AIが外部サービスに持ち込む**検証可能な委任証明**を、Ruby側でどこまで安全に検証できるかを研究するリポジトリです。AP2 v0.2のCheckout Mandateから調査します。署名確認だけで購入を許可したり、未知の発行者を無条件に信用したりしません。固定profileのpre2 GemはGitHubで研究用途限定公開済みです。RubyGems公開・改訂候補の配布は別承認待ちで、本番利用・Phase2BはHOLDです。
|
|
159
|
+
[過去READMEの研究資料一覧 / Historical research documentation](https://github.com/cuichangquan/ap2-mandate-verifier/blob/2546d112b4bd4eaaf0a55b502f1c40b1fd61be65/README.md#research-documentation)は履歴資料であり、現在の契約・公開状態より優先しません。将来のSDK構想は[PRODUCT_VISION](docs/PRODUCT_VISION.md)を参照してください。
|
|
297
160
|
|
|
298
161
|
## License
|
|
299
162
|
|
|
300
163
|
MIT. See [LICENSE](LICENSE).
|
|
164
|
+
|
|
165
|
+
|
data/docs/SUPPORT_CONTRACT.md
CHANGED
|
@@ -1,9 +1,30 @@
|
|
|
1
|
-
# Fixed-profile
|
|
1
|
+
# Fixed-profile AP2 verification — 0.1.0
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
is
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
**Fixed-profile verification contract; Evidence is not Host ALLOW or payment permission.**
|
|
4
|
+
Distribution availability is determined by the official RubyGems version listing, not by this document. Specific Host production GO remains separate.
|
|
5
|
+
Owner adopted the existing verification API and bounded stable-release conditions below. Publication and a specific Host's production operation are separate decisions; this contract does not authorize either.
|
|
6
|
+
Published research-only pre3 remains unchanged. Its historical observations below do not certify this new archive.
|
|
7
|
+
|
|
8
|
+
## Verification contract
|
|
9
|
+
|
|
10
|
+
Preserve `verify_research`, its seven keyword inputs, existing status/code and Evidence v2 identifiers, and legacy APIs' non-success behavior. No API rename, new trust enrollment, remote lookup, DB or payment operation is added. Fixed AP2 commit b4587ac1d055888a73b4b21750973cffba961793 and the exact profile v1 body/hash, seven supported shapes, ES256/P256 and existing bounds remain unchanged.
|
|
11
|
+
Gem-owned signature/original-wire/closure, delegation, binding, supplied-trust selection, constraints, time intersection and fail-closed checks remain Gem responsibilities. Unsupported forms are rejected; do not claim generic AP2/full Schema conformance or real-Issuer interoperability.
|
|
12
|
+
|
|
13
|
+
Host inputs must be authenticated, independent of the token and current: trust/keys/profile/revocation/rollback protection, clock and order/challenge state. Recheck before use; atomically consume nonce with order CAS, reconcile unknown results as PENDING, and decide final ALLOW/payment separately.
|
|
14
|
+
Evidence is immutable checked facts in the same trusted Ruby process, not ALLOW or a transport credential. JSON/Hash reconstruction does not authenticate it. Rejection, unavailability, exceptions and no result never authorize an operation. Trusted Ruby is a precondition, not a malicious-Ruby sandbox.
|
|
15
|
+
|
|
16
|
+
No worst-case CPU/RSS/concurrency or numeric SLA is promised. Host process/time/memory/concurrency limits supplement, not replace, Gem finite input bounds. Issuance, presentation generation, Receipt, Rails adapter, real payments and Host DB operations are outside this verifier.
|
|
17
|
+
Supported-input semantics and existing API/status/code/Evidence contracts must not change silently. Security-driven acceptance narrowing requires impact/reason/migration disclosure; breaking required-field/profile/API changes must be explicit. Dependency updates are not automatically compatible.
|
|
18
|
+
|
|
19
|
+
The proposed baseline remains MRI4.0.9 plus JSON2.19.9/JWT3.3.0/base640.3.0/OpenSSL gem4.0.2/Digest3.2.1, with the exact observed MBA arm64-darwin25 and Ubuntu24.04/x86_64 configurations. RubyGems version constraints do not enforce MRI/OS/provider identity. All OS versions, other engines/architectures and arbitrary provider updates are not supported by past observations.
|
|
20
|
+
Historical D3 observed MBA component identities and four selected crypto symbol sources; OS dyld hashes/all symbol bindings/global runtime security remain unproved. JSON2.19.9 official IO-buffer fix/tag/source identity is adopted static evidence; inconsistent GHSA patched-version metadata remains recorded. Neither observation is global S3 PASS. The earlier R1 archive subsequently passed Mac/Ubuntu packaging checks. It is a different archive; see the separate release-package record for current bytes and observations.
|
|
21
|
+
|
|
22
|
+
Initial maintenance contact: Owner cuichangquan via repository Issues for ordinary bugs and private vulnerability reporting for vulnerabilities. No secrets, real Mandates or personal data in reports. Maintain only the latest patch in the selected initial stable series; no prerelease/old-series backport, fixed support years, response/fix/disclosure deadline or 24/7 promise.
|
|
23
|
+
Manual dependency/provider review is adopted monthly, on relevant advisories and before releases; no active automatic monitor is implied. Updates/deprecation/end of support must identify affected versions, reason and migration path without inventing a fixed notice period. Known major unaddressed issues or inability to maintain mean HOLD, not a blanket disclaimer.
|
|
24
|
+
|
|
25
|
+
## Existing API/limits and historical evidence baseline
|
|
26
|
+
|
|
27
|
+
The API/limit specification below preserves the existing contract. All pre2/pre3/MBA409/R1 observations are historical, not proof of a newly built archive. Exact current source/archive/installed identities and observations are recorded externally in [release-package evidence](../research/stable010_release_linux_package/README.md); no old result is relabelled.
|
|
7
28
|
|
|
8
29
|
## Supported proposition and environment
|
|
9
30
|
|
|
@@ -28,8 +49,8 @@ Digest3.2.1/resolv0.7.2/zlib3.2.3/Bundler4.0.20;885 source regressions passed
|
|
|
28
49
|
as MBA409-20261023-VALIDATION01. PACKAGE01 records the original validation snapshot's
|
|
29
50
|
package/install checks; PACKAGE02 is the later evidence-reference correction.
|
|
30
51
|
Linux4.0.9 was not yet observed at that packaging snapshot; the later pre2 run
|
|
31
|
-
39939021098 is identified below
|
|
32
|
-
The
|
|
52
|
+
39939021098 is identified below as historical pre2 evidence.
|
|
53
|
+
The Gem contains no OpenSSL/JSON native binary and performs no dependency
|
|
33
54
|
download/build itself. Missing fixed/native providers must stop an offline
|
|
34
55
|
validation rather than trigger extra download/build. Actual native paths/hashes
|
|
35
56
|
are environment observations, not proved by gem versions. Bundler4.0.20 is the
|
|
@@ -42,7 +63,7 @@ run39869876461 (885 source checks,52 installed checks,13 payload/10 loaded).
|
|
|
42
63
|
Stage19 records MBA7inputs x3 observations. See the commit-pinned Stage21
|
|
43
64
|
supplement below. Those Ruby4.0.1 observations do not validate this Ruby4.0.9
|
|
44
65
|
candidate. The later pre2 Linux observation is separately identified below;
|
|
45
|
-
|
|
66
|
+
the old pre3 NOT_RUN wording was subsequently superseded by run40038620413. Neither earlier archive supplies new-archive evidence.
|
|
46
67
|
Windows, Intel Mac, other Rubies/engines and all OS versions are unverified.
|
|
47
68
|
No additional Actions run is authorized.
|
|
48
69
|
|
|
@@ -186,13 +207,18 @@ extensions are included. Repository research data/harnesses are now under
|
|
|
186
207
|
research/; historical evidence bytes and logical pins were preserved.
|
|
187
208
|
Local candidate installation can reuse existing fixed dependency homes/default
|
|
188
209
|
OpenSSL: it proves installed candidate usability, not fresh offline installation
|
|
189
|
-
of all dependencies or future download availability. Stable
|
|
190
|
-
realIssuer/production/Phase2B/Stage16 GO require separate decisions.
|
|
191
|
-
|
|
192
|
-
##
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
210
|
+
of all dependencies or future download availability. Stable release or further
|
|
211
|
+
public distribution, realIssuer/production/Phase2B/Stage16 GO require separate decisions.
|
|
212
|
+
|
|
213
|
+
## Published pre3 versus historical evidence
|
|
214
|
+
|
|
215
|
+
The published version is0.1.0.pre.3 under RubyGems owner cuichangquan.
|
|
216
|
+
The Owner's completed publication check matched the official API, distributed
|
|
217
|
+
archive and MBA original:37888B, SHA256
|
|
218
|
+
8ad627818dc69b450d0fba970dafaf368ec42dd64fb51eec631731027de3882c.
|
|
219
|
+
MBA409-PRE3PACKAGE02-20261023 observed13 payload/10 loaded/52 installed checks.
|
|
220
|
+
The post-release Mac mini audit could not independently refetch RubyGems;
|
|
221
|
+
that audit is not a second publication or package-validation observation.
|
|
196
222
|
The historical MBA409 VALIDATION01/PACKAGE01/PACKAGE02 records below identify pre2,
|
|
197
223
|
not new pre3 execution. Product lib and dependency requirements remain unchanged.
|
|
198
224
|
The later pre2 Linux run39939021098 passed885/52 and13/10 at commit
|
|
@@ -282,3 +308,4 @@ https://github.com/cuichangquan/ap2-mandate-verifier/pull/173
|
|
|
282
308
|
The summary must explicitly identify the completed observation; a missing,
|
|
283
309
|
failed or mismatched report is not success. No local path is a public evidence
|
|
284
310
|
URL. Raw local environment logs are not published by this package.
|
|
311
|
+
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: ap2_mandate_verifier
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1.0
|
|
4
|
+
version: 0.1.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- AP2 Mandate Verifier contributors
|
|
@@ -79,9 +79,9 @@ dependencies:
|
|
|
79
79
|
- - '='
|
|
80
80
|
- !ruby/object:Gem::Version
|
|
81
81
|
version: 3.2.1
|
|
82
|
-
description: Stateless fixed
|
|
83
|
-
|
|
84
|
-
|
|
82
|
+
description: Stateless verification of the fixed AP2 profile with immutable Evidence
|
|
83
|
+
using the existing verify_research API. Requires trusted Host inputs and the documented
|
|
84
|
+
runtime; not Host authorization, payment permission or general AP2 conformance.
|
|
85
85
|
executables: []
|
|
86
86
|
extensions: []
|
|
87
87
|
extra_rdoc_files: []
|
|
@@ -119,5 +119,5 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
119
119
|
requirements: []
|
|
120
120
|
rubygems_version: 4.0.20
|
|
121
121
|
specification_version: 4
|
|
122
|
-
summary: Fixed-profile AP2
|
|
122
|
+
summary: Fixed-profile AP2 verification for Ruby
|
|
123
123
|
test_files: []
|