@the-ai-company/cbio-node-runtime 0.39.0 → 1.0.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.
Files changed (113) hide show
  1. package/README.md +116 -54
  2. package/dist/clients/agent/client.d.ts +9 -0
  3. package/dist/clients/agent/client.js +72 -0
  4. package/dist/clients/agent/client.js.map +1 -0
  5. package/dist/clients/agent/contracts.d.ts +34 -0
  6. package/dist/clients/agent/contracts.js +2 -0
  7. package/dist/clients/agent/contracts.js.map +1 -0
  8. package/dist/clients/agent/index.d.ts +3 -0
  9. package/dist/clients/agent/index.js +2 -0
  10. package/dist/clients/agent/index.js.map +1 -0
  11. package/dist/clients/owner/client.d.ts +18 -0
  12. package/dist/clients/owner/client.js +169 -0
  13. package/dist/clients/owner/client.js.map +1 -0
  14. package/dist/clients/owner/contracts.d.ts +34 -0
  15. package/dist/clients/owner/contracts.js +2 -0
  16. package/dist/clients/owner/contracts.js.map +1 -0
  17. package/dist/clients/owner/index.d.ts +3 -0
  18. package/dist/clients/owner/index.js +2 -0
  19. package/dist/clients/owner/index.js.map +1 -0
  20. package/dist/runtime/index.d.ts +8 -10
  21. package/dist/runtime/index.js +8 -7
  22. package/dist/runtime/index.js.map +1 -1
  23. package/dist/storage/fs.d.ts +1 -0
  24. package/dist/storage/fs.js +28 -0
  25. package/dist/storage/fs.js.map +1 -1
  26. package/dist/storage/memory.d.ts +1 -0
  27. package/dist/storage/memory.js +20 -0
  28. package/dist/storage/memory.js.map +1 -1
  29. package/dist/storage/provider.d.ts +2 -0
  30. package/dist/vault-core/contracts.d.ts +230 -0
  31. package/dist/vault-core/contracts.js +2 -0
  32. package/dist/vault-core/contracts.js.map +1 -0
  33. package/dist/vault-core/core.d.ts +21 -0
  34. package/dist/vault-core/core.js +335 -0
  35. package/dist/vault-core/core.js.map +1 -0
  36. package/dist/vault-core/defaults.d.ts +141 -0
  37. package/dist/vault-core/defaults.js +602 -0
  38. package/dist/vault-core/defaults.js.map +1 -0
  39. package/dist/vault-core/errors.d.ts +4 -0
  40. package/dist/vault-core/errors.js +9 -0
  41. package/dist/vault-core/errors.js.map +1 -0
  42. package/dist/vault-core/index.d.ts +6 -0
  43. package/dist/vault-core/index.js +5 -0
  44. package/dist/vault-core/index.js.map +1 -0
  45. package/dist/vault-core/persistence.d.ts +87 -0
  46. package/dist/vault-core/persistence.js +309 -0
  47. package/dist/vault-core/persistence.js.map +1 -0
  48. package/dist/vault-core/ports.d.ts +101 -0
  49. package/dist/vault-core/ports.js +2 -0
  50. package/dist/vault-core/ports.js.map +1 -0
  51. package/dist/vault-ingress/defaults.d.ts +14 -0
  52. package/dist/vault-ingress/defaults.js +41 -0
  53. package/dist/vault-ingress/defaults.js.map +1 -0
  54. package/dist/vault-ingress/flow-factories.d.ts +24 -0
  55. package/dist/vault-ingress/flow-factories.js +48 -0
  56. package/dist/vault-ingress/flow-factories.js.map +1 -0
  57. package/dist/vault-ingress/index.d.ts +81 -0
  58. package/dist/vault-ingress/index.js +357 -0
  59. package/dist/vault-ingress/index.js.map +1 -0
  60. package/docs/ARCHITECTURE.md +44 -76
  61. package/docs/REFERENCE.md +217 -218
  62. package/docs/WORKS_WITH_CUSTOM_FETCH.md +16 -191
  63. package/docs/es/README.md +8 -24
  64. package/docs/fr/README.md +8 -24
  65. package/docs/ja/README.md +8 -24
  66. package/docs/ko/README.md +8 -24
  67. package/docs/pt/README.md +8 -24
  68. package/docs/zh/README.md +21 -7
  69. package/package.json +2 -10
  70. package/dist/agent/agent.d.ts +0 -267
  71. package/dist/agent/agent.js +0 -689
  72. package/dist/agent/agent.js.map +0 -1
  73. package/dist/audit/ActivityLog.d.ts +0 -25
  74. package/dist/audit/ActivityLog.js +0 -71
  75. package/dist/audit/ActivityLog.js.map +0 -1
  76. package/dist/http/authClient.d.ts +0 -26
  77. package/dist/http/authClient.js +0 -132
  78. package/dist/http/authClient.js.map +0 -1
  79. package/dist/http/genericSecretValidator.d.ts +0 -11
  80. package/dist/http/genericSecretValidator.js +0 -42
  81. package/dist/http/genericSecretValidator.js.map +0 -1
  82. package/dist/http/localAuthProxy.d.ts +0 -33
  83. package/dist/http/localAuthProxy.js +0 -93
  84. package/dist/http/localAuthProxy.js.map +0 -1
  85. package/dist/http/localSecretIngress.d.ts +0 -33
  86. package/dist/http/localSecretIngress.js +0 -162
  87. package/dist/http/localSecretIngress.js.map +0 -1
  88. package/dist/http/secretAcquisition.d.ts +0 -54
  89. package/dist/http/secretAcquisition.js +0 -177
  90. package/dist/http/secretAcquisition.js.map +0 -1
  91. package/dist/protocol/childSecretNaming.d.ts +0 -7
  92. package/dist/protocol/childSecretNaming.js +0 -12
  93. package/dist/protocol/childSecretNaming.js.map +0 -1
  94. package/dist/protocol/identity.d.ts +0 -8
  95. package/dist/protocol/identity.js +0 -16
  96. package/dist/protocol/identity.js.map +0 -1
  97. package/dist/sealed/index.d.ts +0 -6
  98. package/dist/sealed/index.js +0 -6
  99. package/dist/sealed/index.js.map +0 -1
  100. package/dist/vault/secretPolicy.d.ts +0 -3
  101. package/dist/vault/secretPolicy.js +0 -14
  102. package/dist/vault/secretPolicy.js.map +0 -1
  103. package/dist/vault/vault.d.ts +0 -100
  104. package/dist/vault/vault.js +0 -603
  105. package/dist/vault/vault.js.map +0 -1
  106. package/docs/TODO-multi-vault.md +0 -29
  107. package/docs/spec/runtime/README.md +0 -44
  108. package/docs/spec/runtime/activity-log.md +0 -71
  109. package/docs/spec/runtime/exposure-surfaces.md +0 -99
  110. package/docs/spec/runtime/managed-agent-record.md +0 -52
  111. package/docs/spec/runtime/merge-rules.md +0 -52
  112. package/docs/spec/runtime/secret-origin-policy.md +0 -46
  113. package/docs/spec/runtime/secret-validation.md +0 -113
@@ -1,29 +0,0 @@
1
- # TODO: Multi-Vault Management
2
-
3
- TUI startup flow: list vaults first, then select or create. No direct key prompt at start.
4
-
5
- ## Core Flow
6
-
7
- 1. **Startup**: Scan `C_BIO_VAULT_DIR` (default `~/.c-bio/`) for `vault_*.enc`
8
- 2. **List**: Show all vault files with full path; add "Create vault" option
9
- 3. **Select**: User picks vault → prompt for private key → load
10
- 4. **Create**: Generate new identity (like `init`) → show keys for user to save → load vault
11
-
12
- ## Edge Cases
13
-
14
- - [ ] Empty directory: show only "Create vault", no empty list
15
- - [ ] Wrong key: decrypt fails → show error, allow retry or back to list
16
- - [ ] Corrupted vault: load fails → show error, allow back to list
17
- - [ ] Quit: from vault list, allow Quit without selecting
18
- - [ ] Directory permission: `C_BIO_VAULT_DIR` unreadable → show permission error
19
-
20
- ## Optional Enhancements
21
-
22
- - [ ] Vault label: optional `.label` file next to vault for user-friendly identification
23
- - [ ] Import from backup: "Import vault" alongside "Create vault"
24
- - [ ] Switch vault: from main menu, return to vault list and select another
25
-
26
- ## Out of Scope (for now)
27
-
28
- - Label file format and storage convention
29
- - Reading activity log metadata for display before unlock (requires decrypt)
@@ -1,44 +0,0 @@
1
- # CBIO Runtime Spec
2
-
3
- This directory defines runtime rules that must stay consistent across language implementations such as Node and Rust.
4
-
5
- These files are not Node-specific API docs. They are shared runtime contracts.
6
-
7
- Use this directory for:
8
- - local persisted record schemas
9
- - runtime-only policy rules
10
- - merge and recovery semantics
11
- - audit/event semantics
12
-
13
- Do not use this directory for:
14
- - Node-only helper APIs
15
- - examples or tutorials
16
- - protocol-layer governance objects already defined by `@the-ai-company/cbio-protocol`
17
-
18
- ## Current Runtime Spec Set
19
-
20
- - [managed-agent-record.md](./managed-agent-record.md): persisted local record for a managed agent identity
21
- - [merge-rules.md](./merge-rules.md): vault merge preconditions and conflict behavior
22
- - [secret-origin-policy.md](./secret-origin-policy.md): allowed origin policy for acquired and rotated secrets
23
- - [activity-log.md](./activity-log.md): local audit event schema and failure semantics
24
- - [secret-validation.md](./secret-validation.md): local compare/proof semantics and versioning contract for future validator adapters
25
- - [exposure-surfaces.md](./exposure-surfaces.md): current runtime exposure surfaces, mitigations, and future hardening areas
26
-
27
- ## Spec Versioning
28
-
29
- Runtime specs in this directory use:
30
-
31
- - an integer version number
32
- - a lifecycle status suffix such as `draft` or `stable`
33
-
34
- Examples:
35
-
36
- - `v1-draft`
37
- - `v1-stable`
38
- - `v2-draft`
39
-
40
- This keeps compatibility decisions obvious while the runtime incubates behavior before anything graduates into a broader protocol contract.
41
-
42
- ## Design Goal
43
-
44
- If a Node runtime and a Rust runtime both claim to implement CBIO runtime behavior, these rules must mean the same thing in both implementations.
@@ -1,71 +0,0 @@
1
- # Activity Log
2
-
3
- ## Purpose
4
-
5
- Defines the local audit trail for vault-authenticated runtime actions.
6
-
7
- This log is runtime-local. It is not a protocol object and is not required to be shared across peers.
8
-
9
- ## Entry Shape
10
-
11
- Each entry must contain:
12
-
13
- ```json
14
- {
15
- "ts": 0,
16
- "action": "fetchWithAuth",
17
- "secretName": "string",
18
- "url": "string",
19
- "method": "GET",
20
- "success": true
21
- }
22
- ```
23
-
24
- Required fields:
25
- - `ts`: event timestamp in Unix milliseconds
26
- - `action`: runtime action name
27
- - `secretName`: vault secret involved
28
- - `url`: request URL
29
- - `method`: HTTP method
30
- - `success`: whether the action succeeded
31
-
32
- Optional fields:
33
- - `error`: failure message when `success` is `false`
34
-
35
- ## Defined Actions
36
-
37
- Current action names:
38
- - `fetchWithAuth`
39
- - `fetchJsonAndAddSecret`
40
- - `fetchJsonAndUpdateSecret`
41
- - `compareSecret`
42
- - `proveSecret`
43
- - `validateSecret`
44
-
45
- ## Required Semantics
46
-
47
- 1. `fetchWithAuth` success and failure attempts must append an activity entry.
48
- 2. JSON secret acquisition and rotation success and failure attempts must append an activity entry.
49
- 3. Direct admin secret mutation such as `addSecret` is not part of this audit stream.
50
- 4. Local compare/proof/validate attempts should append activity entries without exporting plaintext secret values.
51
-
52
- ## Failure Semantics
53
-
54
- If activity log persistence fails:
55
-
56
- - `fetchWithAuth` may still throw its primary runtime error
57
- - `fetchJsonAndAddSecret` and `fetchJsonAndUpdateSecret` must return their normal `FetchResult` shape
58
- - those returned results must set `activityLogWriteFailed: true`
59
-
60
- The primary operation outcome must not be silently rewritten into a different success/failure class solely because audit persistence failed.
61
-
62
- ## Compatibility
63
-
64
- - Action names are part of the runtime contract.
65
- - Writers may append extra fields, but readers must tolerate unknown fields.
66
-
67
- ## Non-Goals
68
-
69
- - Defining centralized logging
70
- - Defining protocol-visible governance audit records
71
- - Defining retention policy for local log files
@@ -1,99 +0,0 @@
1
- # Exposure Surfaces
2
-
3
- ## Purpose
4
-
5
- Documents the currently known secret exposure surfaces that still exist even after the runtime removes public plaintext secret export from its supported flows.
6
-
7
- This document is a runtime security inventory, not a protocol object.
8
-
9
- ## Current Exposure Surfaces
10
-
11
- ### 1. Root Initialization Window
12
-
13
- The root private key may still exist in cleartext during initial generation, import, prompt entry, environment injection, or process startup wiring.
14
-
15
- This is currently the primary accepted plaintext bootstrap window.
16
-
17
- ### 2. Runtime Process Memory
18
-
19
- Secrets still exist in runtime memory while they are being:
20
-
21
- - acquired
22
- - used for authenticated requests
23
- - compared
24
- - proven
25
- - validated
26
-
27
- Memory compromise remains an exposure surface.
28
-
29
- ### 3. Remote Target Disclosure
30
-
31
- When the runtime uses a secret against a remote service, that target service necessarily receives the credential or proof material required for the request.
32
-
33
- Examples:
34
-
35
- - `fetchWithAuth`
36
- - `startLocalAuthProxy`
37
- - provider-backed validation probes
38
-
39
- ### 4. Local Ingress Channel
40
-
41
- Local secret ingress reduces terminal exposure, but the local handoff channel still exists.
42
-
43
- Relevant artifacts include:
44
-
45
- - loopback listener state
46
- - one-time ingress token
47
- - local process boundaries
48
-
49
- ### 5. Secret Operation Oracles
50
-
51
- Local KMS-like operations such as compare, proof, and validation are safer than plaintext export, but they still create controlled oracles.
52
-
53
- Risk examples:
54
-
55
- - repeated compare attempts against low-entropy values
56
- - repeated proof generation against attacker-chosen challenges
57
-
58
- ### 6. Authority-Held Managed Identity Material
59
-
60
- Authority vaults may still contain managed-agent or child-identity private key material as runtime-internal records.
61
-
62
- These records are hidden from the public secret namespace, but authority compromise remains a high-impact event.
63
-
64
- ### 7. Backup and Sealed Export Assets
65
-
66
- Sealed vault exports are encrypted, but they remain high-value assets. Their security depends on the external key-encryption-key lifecycle.
67
-
68
- ### 8. User-Supplied Surrounding Code
69
-
70
- The runtime can avoid plaintext export on its own surfaces, but surrounding application code may still leak:
71
-
72
- - ingress tokens
73
- - validation metadata
74
- - proofs
75
- - request traces
76
- - root bootstrap material
77
-
78
- ## Current Mitigations
79
-
80
- Implemented mitigations include:
81
-
82
- - no public plaintext secret retrieval API
83
- - no public plaintext secret add API
84
- - direct remote acquisition into vault
85
- - local secret ingress instead of terminal handoff
86
- - local compare/proof/validate without plaintext export
87
- - hidden internal record namespace for managed-agent and revocation records
88
- - rate limiting for local compare/proof/validate operations
89
- - audit entries for local compare/proof/validate operations
90
-
91
- ## Ongoing Hardening Areas
92
-
93
- Future hardening should focus on:
94
-
95
- - stronger rate limiting and policy controls for local secret oracles
96
- - stricter challenge/purpose rules for proof generation
97
- - tighter handling of authority-held managed identity material
98
- - guidance and tooling for safer bootstrap of the root private key
99
- - clearer backup/KDK operational guidance
@@ -1,52 +0,0 @@
1
- # Managed Agent Record
2
-
3
- ## Purpose
4
-
5
- Defines the persisted local record format used by a parent identity to store a managed agent identity in its own vault.
6
-
7
- This is a runtime record, not a protocol object.
8
-
9
- ## Record Shape
10
-
11
- The persisted JSON object must contain:
12
-
13
- ```json
14
- {
15
- "agentId": "string",
16
- "publicKey": "string",
17
- "privateKey": "string",
18
- "issuedIdentity": {},
19
- "storageKey": "string"
20
- }
21
- ```
22
-
23
- Required fields:
24
- - `agentId`: the derived root agent id for `publicKey`
25
- - `publicKey`: the managed agent public key
26
- - `privateKey`: the managed agent private key
27
- - `issuedIdentity`: the signed `IssuedAgentIdentity` protocol object for the managed agent
28
-
29
- Optional fields:
30
- - `storageKey`: the vault storage key where the managed agent's vault data is or should be persisted. When present, loaders must use it to restore the same vault binding used at issuance; when absent, loaders may use an implementation-defined default (e.g. derived from `publicKey`).
31
-
32
- ## Required Semantics
33
-
34
- 1. `issuedIdentity.agent.public_key` must equal `publicKey`.
35
- 2. `issuedIdentity.agent.agent_id` must equal `agentId`.
36
- 3. `privateKey` must derive to `publicKey`.
37
- 4. The record is stored in the authority vault under an authority-chosen record key.
38
- 5. Loading a managed agent from this record must fail if the managed agent has been revoked by the authority.
39
- 6. When `storageKey` is present, loaders must prefer it for vault binding; writers may depend on this for correctness.
40
-
41
- ## Compatibility
42
-
43
- - Field names are part of the runtime contract.
44
- - `storageKey` is a defined optional field; writers may depend on readers honoring it when present.
45
- - Other additional fields may be ignored by readers, and writers should not depend on them for correctness.
46
- - A future versioned schema must use an explicit version field instead of changing meanings silently.
47
-
48
- ## Non-Goals
49
-
50
- - Defining the `IssuedAgentIdentity` protocol object itself
51
- - Defining how the vault encrypts or persists this record
52
- - Defining language-specific API shapes such as `issueManagedAgent(...)`
@@ -1,52 +0,0 @@
1
- # Merge Rules
2
-
3
- ## Purpose
4
-
5
- Defines when one runtime vault may merge secrets from another vault representing the same root identity.
6
-
7
- ## Preconditions
8
-
9
- 1. Both vaults must belong to the same root identity.
10
- 2. If root identities differ, the merge must fail with `MERGE_IDENTITY_MISMATCH`.
11
-
12
- ## Conflict Modes
13
-
14
- Supported conflict modes:
15
- - `abort`
16
- - `skip`
17
- - `overwrite`
18
-
19
- ### `abort`
20
-
21
- - If any incoming secret name already exists in the target vault, the merge must fail.
22
- - No partial merge may be committed.
23
-
24
- ### `skip`
25
-
26
- - Existing target secrets keep their current value.
27
- - Incoming secrets with new names are merged.
28
-
29
- ### `overwrite`
30
-
31
- - Incoming secrets replace target secrets with the same name.
32
- - Incoming secrets with new names are merged.
33
-
34
- ## Required Semantics
35
-
36
- 1. Merge identity matching is determined from the vault owner identity, not from caller trust.
37
- 2. Secret names are the merge keys.
38
- 3. Secret values and their associated policy metadata must move together.
39
- 4. Merge behavior must be deterministic for a given source vault, target vault, and conflict mode.
40
-
41
- ## Result Shape
42
-
43
- Implementations may expose result objects differently, but they must be able to report at least:
44
- - added secret names
45
- - skipped secret names
46
- - overwritten secret names
47
-
48
- ## Non-Goals
49
-
50
- - Defining a protocol object for merges
51
- - Defining cross-process locking
52
- - Defining transport/import mechanisms for moving sealed vault data
@@ -1,46 +0,0 @@
1
- # Secret Origin Policy
2
-
3
- ## Purpose
4
-
5
- Defines the runtime policy for secrets acquired from remote endpoints and for later rotation of those secrets.
6
-
7
- ## URL Acceptance
8
-
9
- An acquisition or rotation URL is allowed only if:
10
- - it uses `https:`, or
11
- - it uses `http:` with a loopback host for local development
12
-
13
- Loopback hosts include:
14
- - `localhost`
15
- - `127.0.0.1`
16
- - `[::1]`
17
-
18
- Non-loopback plain HTTP must be rejected.
19
-
20
- ## Acquisition Semantics
21
-
22
- When a secret is fetched from a remote endpoint and stored:
23
-
24
- 1. If the caller does not provide `allowedOrigins`, the stored secret policy must default to the fetch URL origin.
25
- 2. If the requested secret name already exists, the runtime must allocate a unique name by suffixing `_N` where `N` starts at `1`.
26
- 3. The returned payload must not leak the extracted secret value in cleartext.
27
-
28
- ## Rotation Semantics
29
-
30
- When a secret is rotated from a remote endpoint:
31
-
32
- 1. The rotation source origin must be allowed by the existing secret policy.
33
- 2. If no origin policy exists for the secret, rotation must fail with `SECRET_POLICY_REQUIRED`.
34
- 3. If the fetch origin is not allowed, rotation must fail with `SECRET_SOURCE_ORIGIN_MISMATCH`.
35
- 4. A failed rotation must not replace the existing active secret value.
36
-
37
- ## Normalization
38
-
39
- - Origin comparison is performed on normalized origin strings.
40
- - Path, query, and fragment are not part of the policy match.
41
-
42
- ## Non-Goals
43
-
44
- - Defining provider-specific API behavior
45
- - Defining generic HTTP request libraries
46
- - Defining how secret values are used after storage
@@ -1,113 +0,0 @@
1
- # Secret Validation
2
-
3
- ## Spec Version
4
-
5
- - `version`: `1`
6
- - `status`: `draft`
7
- - Display form: `v1-draft`
8
-
9
- This document defines the runtime contract for local secret proof and validation-oriented operations.
10
-
11
- This is a runtime spec, not a protocol object.
12
-
13
- ## Purpose
14
-
15
- Defines how a CBIO runtime may:
16
-
17
- - prove possession of a secret without exporting it
18
- - compare a candidate against a stored secret without exporting it
19
- - evolve toward provider-backed remote validation without changing the core result semantics
20
-
21
- ## Scope
22
-
23
- This spec currently covers:
24
-
25
- - local compare semantics
26
- - local proof semantics
27
- - versioning rules for future remote validator adapters
28
-
29
- This spec does not yet define:
30
-
31
- - provider-specific validator endpoints
32
- - cross-network proof exchange formats
33
- - third-party CBIO-native validation endpoints
34
-
35
- ## Versioning Rules
36
-
37
- Runtime secret validation specs use:
38
-
39
- - an integer `version`
40
- - a lifecycle `status`
41
-
42
- Examples:
43
-
44
- - `v1-draft`
45
- - `v1-stable`
46
- - `v2-draft`
47
-
48
- Rules:
49
-
50
- 1. Increment the integer version when behavior, required fields, or result semantics change incompatibly.
51
- 2. Change only the status when the semantics stay the same but implementation confidence changes.
52
- 3. Do not reuse an older integer version for different semantics.
53
-
54
- ## Local Compare Semantics
55
-
56
- `compareSecret(secretName, candidate)` must:
57
-
58
- 1. return `true` only when the candidate exactly matches the active secret value
59
- 2. return `false` when the candidate does not match
60
- 3. fail with `SECRET_NOT_FOUND` when the named secret does not exist
61
- 4. not return the stored secret value in cleartext
62
- 5. use a comparison method suitable for secret material
63
-
64
- ## Local Proof Semantics
65
-
66
- `proveSecret(secretName, challenge, options?)` must:
67
-
68
- 1. fail with `SECRET_NOT_FOUND` when the named secret does not exist
69
- 2. not return the stored secret value in cleartext
70
- 3. deterministically derive a proof from:
71
- - the active secret value
72
- - the provided challenge
73
- - the selected algorithm
74
-
75
- ### Defined Algorithms
76
-
77
- Current algorithm names:
78
-
79
- - `sha256`
80
- - `sha512`
81
-
82
- For `v1-draft`, the proof value is:
83
-
84
- - `HMAC(algorithm, secretValue, challenge)`
85
- - encoded as `base64url`
86
-
87
- ## Permission Semantics
88
-
89
- Runtime handles must treat local compare/proof operations as secret acquisition-class capabilities.
90
-
91
- For `v1-draft`:
92
-
93
- - `CbioIdentity` may invoke these operations
94
- - `CbioAgent` requires `vault:acquire`
95
-
96
- ## Forward Compatibility
97
-
98
- Future versions may add remote validator contracts that return structured validation results such as:
99
-
100
- - `valid`
101
- - `reason`
102
- - `providerSubject`
103
- - `expiresAt`
104
- - `scopes`
105
- - `metadata`
106
-
107
- Those result objects must be versioned under this spec family rather than silently changing local compare/proof semantics.
108
-
109
- ## Non-Goals
110
-
111
- - Defining a cloud KMS protocol
112
- - Defining provider-specific auth probe behavior
113
- - Defining how third-party websites must expose validation endpoints