deviations.toml (12501B)
1 schema_version = 1 2 architecture_id = "radroots.crates.release.v1" 3 4 [[deviation]] 5 id = "RCRV1-DEV-012" 6 date = "2026-08-03" 7 status = "closed" 8 approval = "All code-review recommendations and the full multi-RCLD implementation sequence were explicitly approved by the user." 9 affected_steps = ["279", "282", "283"] 10 spec_anchors = [ 11 "docs/specs/radroots_crates_release_v1.md#18-radroots_sdk", 12 "docs/specs/radroots_crates_release_v1.md#161-radroots_sdk", 13 ] 14 source_evidence = [ 15 "The initial Step 279 app_rt bridge removed mobile identity, relay, profile, and post behavior before an equivalent shared-engine SDK operation surface existed.", 16 "The Step 282 simulator compile exposed those removed operations as downstream iOS failures rather than presentation-only drift.", 17 "The canonical transport selector correction in oss/lib now permits bounded kind, author, and time-filtered Nostr retrieval without reintroducing legacy runtime ownership.", 18 ] 19 replacement_action = "Before completing Step 282, add SDK-owned host-controlled local-signer and Nostr slots, explicit native host sync policy, and bounded verified social fetch/publish operations; then keep keychain persistence, lifecycle polling, and retry scheduling in the iOS host." 20 verification = [ 21 "The SDK mobile feature composition builds and tests with one shared client and no hidden executor or worker.", 22 "Local signer generation hands the only persistence representation to the host; clear and restore retain the same public identity.", 23 "Nostr relay replacement validates the full set before atomic installation and preserves the prior set on failure.", 24 "Fetch verifies and durably ingests accepted events; publish durably enqueues and performs exactly one explicit delivery pass.", 25 ] 26 unresolved_risk = "None; the regenerated app_rt bridge and iOS host consume the final SDK-owned operation surface." 27 normative_architecture_change = false 28 adr_required = false 29 closure_evidence = [ 30 "Step 282 regenerated and qualified the app_rt bindings against the final shared SDK engine.", 31 "Step 283 migrated and qualified the iOS host with host-owned keychain persistence, lifecycle polling, and retry scheduling.", 32 ] 33 34 [[deviation]] 35 id = "RCRV1-DEV-008" 36 date = "2026-08-01" 37 status = "closed" 38 approval = "All code-review recommendations and the full multi-RCLD implementation sequence were explicitly approved by the user." 39 affected_steps = ["153", "155", "171", "179", "226", "288", "293", "313"] 40 spec_anchors = [ 41 "docs/specs/radroots_crates_release_v1.md#12-radroots_secrets", 42 "docs/specs/radroots_crates_release_v1.md#20-current-to-target-migration-map", 43 ] 44 source_evidence = [ 45 "Step 179, not Step 153, owns transfer of the current SDK private database and its encrypted records into canonical SQLite storage.", 46 "The SDK activated the final radroots_secrets dependency while its private_store module remained the sole predecessor secret-store quarantine through Step 247.", 47 "Mixed publish-frozen runtime, Myc, and other external hosts still require predecessor vault/store behavior until their ordered migration steps.", 48 ] 49 replacement_action = "Activate the final optional radroots_secrets edge in Step 153; remove the SDK private_store quarantine at Step 248; Steps 288/293 migrate remaining downstream consumers, and Step 313 removes every remaining compatibility package and external legacy name." 50 verification = [ 51 "Step 248 source reachability and manifest-target checks prove private_store.rs and its dormant tests are removed from the SDK package.", 52 "The local-signer feature activates radroots_secrets without changing the current runtime storage implementation before Step 179.", 53 "Step 155 release-policy validation keeps every quarantine package non-publishable until its exact removal gate.", 54 ] 55 unresolved_risk = "None; every predecessor package and downstream source edge is absent." 56 normative_architecture_change = false 57 adr_required = false 58 closure_evidence = [ 59 "The SDK package-boundary test rejects private_store and every predecessor secret-store package.", 60 "Step 313 source census confirmed the library, SDK, Myc, and CLI consume only final secrets and storage owners.", 61 ] 62 63 [[deviation]] 64 id = "RCRV1-DEV-001" 65 date = "2026-07-27" 66 status = "active" 67 approval = "Explicit user correction dated 2026-07-27." 68 affected_steps = [ 69 "015", 70 "016", 71 "017", 72 "018", 73 "019", 74 "020", 75 "021", 76 "022", 77 "023", 78 "026", 79 ] 80 spec_anchors = [ 81 "docs/specs/radroots_crates_release_v1.md#repository-ownership", 82 "docs/specs/radroots_crates_release_v1.toml#repository_policy", 83 ] 84 source_evidence = [ 85 "The final v1 specification allocates 17 public packages to radrootslabs/lib and 2 to radrootslabs/sdk.", 86 "Both existing repositories have independent histories, workspaces, lockfiles, remotes, and standalone release boundaries.", 87 ] 88 replacement_action = "Retain the two existing standalone repositories; replace import and monorepo-unification work with independent workspace, lockfile, metadata, dependency, and release qualification." 89 verification = [ 90 "Both repository-local architecture validators resolve every spec anchor.", 91 "The synchronized architecture catalog enforces the exact 17/2 ownership partition.", 92 "Each standalone repository owns a required architecture CI adapter over its repository-local command surface.", 93 ] 94 unresolved_risk = "Parent gitlinks cannot advance until the new standalone commits are public-remote reachable under separate authorization." 95 normative_architecture_change = false 96 adr_required = false 97 98 [[deviation]] 99 id = "RCRV1-DEV-002" 100 date = "2026-07-27" 101 status = "closed" 102 approval = "Explicit user correction dated 2026-07-27." 103 affected_steps = ["249"] 104 spec_anchors = [ 105 "docs/specs/radroots_crates_release_v1.md#radroots", 106 "docs/specs/radroots_crates_release_v1.toml#repositories.sdk", 107 ] 108 source_evidence = [ 109 "The final v1 specification assigns the radroots facade to the existing sdk repository.", 110 "The approved sequence requires radroots to be the first crate-surface mutation after architecture controls are green.", 111 ] 112 replacement_action = "Scaffold radroots in the sdk repository immediately after Step 014, then execute Steps 250-260 in their original order without repeating the scaffold portion of Step 249." 113 verification = [ 114 "The sdk release policy reserves radroots as an approved local package while publication remains frozen.", 115 "The facade scaffold checkpoint must add radroots only to the sdk workspace and architecture policy.", 116 ] 117 unresolved_risk = "None; the facade completed Steps 249-260 and Step 305 enabled its validation-only publication metadata." 118 normative_architecture_change = false 119 adr_required = false 120 closure_evidence = [ 121 "The radroots package remains solely in oss/sdk and exposes the reviewed curated facade.", 122 "Publication policy enables exactly radroots_sdk and radroots for validation staging without authorizing upload.", 123 ] 124 125 [[deviation]] 126 id = "RCRV1-DEV-005" 127 date = "2026-07-28" 128 status = "active" 129 approval = "Explicit user Rust version-policy update dated 2026-07-28 17:47 UTC." 130 affected_steps = [ 131 "013", 132 "019", 133 "020", 134 "021", 135 "022", 136 "023", 137 "024", 138 "025", 139 "026", 140 "226", 141 "247", 142 "249", 143 "250", 144 "251", 145 "252", 146 "253", 147 "254", 148 "255", 149 "256", 150 "257", 151 "258", 152 "259", 153 "260", 154 "261", 155 "262", 156 "263", 157 "264", 158 "265", 159 "266", 160 "267", 161 "268", 162 "305", 163 ] 164 spec_anchors = [ 165 "docs/specs/radroots_crates_release_v1.md#221-initial-versions", 166 "docs/specs/radroots_crates_release_v1.toml#repositories.sdk", 167 ] 168 source_evidence = [ 169 "The prior 0.1.0 and 0.1.0-alpha.2 SDK crate cohorts were explicitly superseded.", 170 "The user requires every Rust crate in both standalone repositories to remain exactly 0.1.0-alpha until further explicit notice.", 171 ] 172 replacement_action = "Pin every workspace package, lockfile entry, and internal Radroots dependency requirement in oss/sdk to 0.1.0-alpha; reject cohort drift until new explicit authority is recorded." 173 verification = [ 174 "Repository architecture validation rejects any workspace package version other than 0.1.0-alpha.", 175 "Internal Radroots dependency requirements resolve exactly to =0.1.0-alpha.", 176 "The synchronized release specification and SDK lockfile record the same frozen cohort.", 177 ] 178 unresolved_risk = "The prerelease cohort intentionally prevents independent package version advancement until a future explicit policy change." 179 normative_architecture_change = false 180 adr_required = false 181 182 [[deviation]] 183 id = "RCRV1-DEV-006" 184 date = "2026-07-28" 185 status = "closed" 186 approval = "All code-review recommendations approved and persistent full-sequence execution authorized by the user on 2026-07-28." 187 affected_steps = [ 188 "073", 189 "261", 190 "262", 191 "263", 192 "264", 193 "265", 194 "266", 195 "267", 196 "268", 197 ] 198 spec_anchors = [ 199 "docs/specs/radroots_crates_release_v1.md#17-public-code-generation-and-cross-language-policy", 200 ] 201 source_evidence = [ 202 "Step 073 removes the public radroots_event code-generation feature and therefore invalidates the predecessor SDK generator's direct DTO registry edge.", 203 "The approved sequence assigns the protocol- and codec-owned cross-language replacement to Steps 261-268.", 204 ] 205 replacement_action = "Retire SDK activation of public event and trade code-generation features now; keep the existing event and trade TypeScript type surfaces as SHA-256-authenticated, fail-closed predecessor snapshots until Steps 261-268 replace them from radroots_protocol and radroots_event_codec contracts." 206 verification = [ 207 "The SDK xtask rejects either predecessor snapshot unless its reviewed SHA-256 digest matches.", 208 "Generated provenance identifies the authenticated snapshot source and its replacement step range.", 209 "The SDK workspace compiles without enabling radroots_event or radroots_trade code-generation features.", 210 ] 211 unresolved_risk = "None; Steps 261-268 replaced the predecessor snapshots with protocol- and codec-owned generation." 212 normative_architecture_change = false 213 adr_required = false 214 closure_evidence = [ 215 "The package generator reads only the approved protocol, event, trade, and replica-schema authorities.", 216 "Generated freshness and provenance checks reject predecessor snapshot ownership or unregistered output.", 217 ] 218 219 [[deviation]] 220 id = "RCRV1-DEV-007" 221 date = "2026-07-30" 222 status = "closed" 223 approval = "All code-review recommendations and the full multi-RCLD implementation sequence were explicitly approved by the user." 224 affected_steps = ["122", "170", "235", "305"] 225 spec_anchors = [ 226 "docs/specs/radroots_crates_release_v1.md#9-radroots_transport", 227 "docs/specs/radroots_crates_release_v1.md#111-separate-source-and-sink-contracts", 228 ] 229 source_evidence = [ 230 "Step 120 migrated canonical adapters and registries to independent EventSource and EventSink contracts.", 231 "Mixed runtime delivery workers still consume predecessor request and receipt models until their ordered RCLD 40 migration.", 232 "The standalone publish-frozen SDK still maps user-facing target and satisfaction models into predecessor outbox orchestration until Step 235.", 233 "oss/cli/src/runtime/{config,sync,transport}.rs and oss/radrootsd/src/core/transport_publish.rs still import the predecessor identity aliases and Reticulum target helpers; those standalone repositories are outside the approved crate-surface mutation scope.", 234 ] 235 replacement_action = "Consume canonical transport identity and target types immediately; retain the SDK-local unpublished target-set and satisfaction-policy mapping only until Step 235, while documentation-hidden lib aliases/helpers required by out-of-scope CLI and daemon consumers remain publication-blocking until Step 305." 236 verification = [ 237 "SDK source-boundary tests reject every removed public predecessor transport name.", 238 "SDK release policy keeps publication disabled while the downstream mapping remains.", 239 "Step 235 is the exact fail-closed final-removal gate for SDK-local duplicate transport types.", 240 "Step 305 rejects publication until oss/cli and oss/radrootsd no longer require the documentation-hidden external-consumer aliases and Reticulum helpers.", 241 ] 242 unresolved_risk = "None; SDK, CLI, and daemon consumers use the final transport identities and targets." 243 normative_architecture_change = false 244 adr_required = false 245 closure_evidence = [ 246 "Step 235 removed the SDK-local duplicate target and satisfaction mapping.", 247 "Step 313 migrated the daemon and confirmed every hidden external-consumer alias and Reticulum helper is absent from radroots_transport.", 248 ]