@feltdb/core 0.8.3 → 0.8.5
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.
- package/dist/cli/commands.js +4 -1
- package/dist/cli/provisioning-neutrality.js +79 -0
- package/dist/collection.d.ts +43 -1
- package/dist/collection.d.ts.map +1 -1
- package/dist/collection.js +192 -22
- package/dist/create/create.js +25 -21
- package/dist/create/managed-account.js +11 -0
- package/dist/create/package-versions.js +1 -1
- package/dist/create/server-source/Cargo.lock +165 -0
- package/dist/create/server-source/Cargo.toml +9 -0
- package/dist/create/server-source/crates/feltdb/Cargo.toml +3 -0
- package/dist/create/server-source/crates/feltdb/benches/gate13_baseline.rs +44 -44
- package/dist/create/server-source/crates/feltdb/benches/gate13_phase_7_1_release_economics.rs +12 -24
- package/dist/create/server-source/crates/feltdb/benches/gate_13_redux.rs +7 -13
- package/dist/create/server-source/crates/feltdb/benches/gate_13_regression_runner.rs +13 -10
- package/dist/create/server-source/crates/feltdb/benches/gate_14a_concurrent_writer_scaling.rs +12 -9
- package/dist/create/server-source/crates/feltdb/benches/gate_14a_production_admission_revalidation.rs +78 -25
- package/dist/create/server-source/crates/feltdb/benches/gate_14a_rc2_admission_contract.rs +16 -13
- package/dist/create/server-source/crates/feltdb/benches/gate_14a_rc_root_cause.rs +13 -5
- package/dist/create/server-source/crates/feltdb/benches/gate_14a_sync1_queued_prototype.rs +41 -22
- package/dist/create/server-source/crates/feltdb/benches/gate_14a_sync_economics.rs +33 -15
- package/dist/create/server-source/crates/feltdb/benches/gate_14b_causal_backlog_scaling.rs +100 -33
- package/dist/create/server-source/crates/feltdb/benches/gate_14c_replication_contract_test.rs +56 -20
- package/dist/create/server-source/crates/feltdb/benches/gate_14c_replication_scaling.rs +116 -41
- package/dist/create/server-source/crates/feltdb/benches/gate_14d_combined_dimension_scaling.rs +186 -55
- package/dist/create/server-source/crates/feltdb/benches/phase_7_1_2_optimization_benchmark.rs +64 -26
- package/dist/create/server-source/crates/feltdb/benches/phase_7_1_3_crossover_analysis.rs +46 -15
- package/dist/create/server-source/crates/feltdb/src/admission.rs +8 -15
- package/dist/create/server-source/crates/feltdb/src/admission_contract_tests.rs +43 -13
- package/dist/create/server-source/crates/feltdb/src/adversarial_transport.rs +15 -42
- package/dist/create/server-source/crates/feltdb/src/analytics.rs +65 -19
- package/dist/create/server-source/crates/feltdb/src/application.rs +113 -30
- package/dist/create/server-source/crates/feltdb/src/authorization_security_tests.rs +475 -140
- package/dist/create/server-source/crates/feltdb/src/cardinality_diagnostics.rs +17 -15
- package/dist/create/server-source/crates/feltdb/src/cardinality_endpoint.rs +0 -1
- package/dist/create/server-source/crates/feltdb/src/causal_backlog_bound.rs +59 -15
- package/dist/create/server-source/crates/feltdb/src/causal_dependency_barrier.rs +266 -114
- package/dist/create/server-source/crates/feltdb/src/causal_dependency_barrier_phase_7_1.rs +25 -7
- package/dist/create/server-source/crates/feltdb/src/concurrency_fuzzing.rs +10 -15
- package/dist/create/server-source/crates/feltdb/src/consistency_contract.rs +3 -11
- package/dist/create/server-source/crates/feltdb/src/crash_atomic_boundary.rs +14 -5
- package/dist/create/server-source/crates/feltdb/src/crash_injection.rs +21 -25
- package/dist/create/server-source/crates/feltdb/src/crash_recovery_tests.rs +14 -11
- package/dist/create/server-source/crates/feltdb/src/dedup_bound_investigation.rs +103 -22
- package/dist/create/server-source/crates/feltdb/src/distributed_indexing.rs +18 -15
- package/dist/create/server-source/crates/feltdb/src/durability_guarantees.rs +12 -8
- package/dist/create/server-source/crates/feltdb/src/durable_dedup_set.rs +1 -5
- package/dist/create/server-source/crates/feltdb/src/durable_operation_identity.rs +87 -23
- package/dist/create/server-source/crates/feltdb/src/durable_operation_log.rs +3 -7
- package/dist/create/server-source/crates/feltdb/src/durable_sync.rs +10 -9
- package/dist/create/server-source/crates/feltdb/src/equality_index.rs +595 -0
- package/dist/create/server-source/crates/feltdb/src/in_process_transport.rs +1 -6
- package/dist/create/server-source/crates/feltdb/src/indexing.rs +35 -38
- package/dist/create/server-source/crates/feltdb/src/lib.rs +1050 -117
- package/dist/create/server-source/crates/feltdb/src/managed_cas_tests.rs +4 -1
- package/dist/create/server-source/crates/feltdb/src/metrics.rs +0 -1
- package/dist/create/server-source/crates/feltdb/src/multi_node_convergence.rs +1 -2
- package/dist/create/server-source/crates/feltdb/src/multi_operation_transaction.rs +107 -30
- package/dist/create/server-source/crates/feltdb/src/observability.rs +19 -6
- package/dist/create/server-source/crates/feltdb/src/operation_algebra.rs +12 -11
- package/dist/create/server-source/crates/feltdb/src/operation_log.rs +9 -4
- package/dist/create/server-source/crates/feltdb/src/p1_application_atomicity.rs +65 -18
- package/dist/create/server-source/crates/feltdb/src/p1_atomicity_acceptance.rs +193 -57
- package/dist/create/server-source/crates/feltdb/src/partition_reconciliation.rs +37 -27
- package/dist/create/server-source/crates/feltdb/src/permutation_scheduler.rs +38 -10
- package/dist/create/server-source/crates/feltdb/src/persistence_reality.rs +20 -14
- package/dist/create/server-source/crates/feltdb/src/phase1b_acceptance.rs +394 -229
- package/dist/create/server-source/crates/feltdb/src/phase1c1_acceptance.rs +8 -6
- package/dist/create/server-source/crates/feltdb/src/phase1c2_acceptance.rs +11 -13
- package/dist/create/server-source/crates/feltdb/src/phase1c3_acceptance.rs +90 -72
- package/dist/create/server-source/crates/feltdb/src/phase1c_atomicity_proof.rs +3 -3
- package/dist/create/server-source/crates/feltdb/src/phase5_integration.rs +33 -11
- package/dist/create/server-source/crates/feltdb/src/phase5_scenarios.rs +6 -6
- package/dist/create/server-source/crates/feltdb/src/phase6_adversarial_scenarios.rs +14 -56
- package/dist/create/server-source/crates/feltdb/src/phase6_convergence_validator.rs +29 -27
- package/dist/create/server-source/crates/feltdb/src/phase6_persistence.rs +35 -17
- package/dist/create/server-source/crates/feltdb/src/phase_1c_real_tcp.rs +8 -2
- package/dist/create/server-source/crates/feltdb/src/phase_2a_failures.rs +59 -15
- package/dist/create/server-source/crates/feltdb/src/phase_2b_network.rs +70 -17
- package/dist/create/server-source/crates/feltdb/src/phase_2c_cascading.rs +23 -6
- package/dist/create/server-source/crates/feltdb/src/phase_3_durability.rs +12 -3
- package/dist/create/server-source/crates/feltdb/src/phase_4_baseline.rs +41 -11
- package/dist/create/server-source/crates/feltdb/src/phase_5_soak.rs +56 -25
- package/dist/create/server-source/crates/feltdb/src/policy_evaluation.rs +701 -245
- package/dist/create/server-source/crates/feltdb/src/production_api.rs +31 -13
- package/dist/create/server-source/crates/feltdb/src/query_execution_diagnostics.rs +126 -0
- package/dist/create/server-source/crates/feltdb/src/query_performance.rs +6 -8
- package/dist/create/server-source/crates/feltdb/src/replay_fuzzing.rs +5 -5
- package/dist/create/server-source/crates/feltdb/src/replica_acknowledgements.rs +48 -18
- package/dist/create/server-source/crates/feltdb/src/replica_membership.rs +30 -11
- package/dist/create/server-source/crates/feltdb/src/replication_manager.rs +6 -3
- package/dist/create/server-source/crates/feltdb/src/replication_protocol.rs +4 -3
- package/dist/create/server-source/crates/feltdb/src/sharding.rs +36 -10
- package/dist/create/server-source/crates/feltdb/src/state_conflict_contract.rs +516 -0
- package/dist/create/server-source/crates/feltdb/src/state_contract.rs +305 -6
- package/dist/create/server-source/crates/feltdb/src/state_diff_contract.rs +222 -0
- package/dist/create/server-source/crates/feltdb/src/state_facade.rs +82 -54
- package/dist/create/server-source/crates/feltdb/src/state_hash.rs +2 -2
- package/dist/create/server-source/crates/feltdb/src/state_model.rs +1514 -537
- package/dist/create/server-source/crates/feltdb/src/state_transition_store.rs +6 -3
- package/dist/create/server-source/crates/feltdb/src/state_trigger.rs +672 -0
- package/dist/create/server-source/crates/feltdb/src/submission.rs +5 -11
- package/dist/create/server-source/crates/feltdb/src/sync.rs +12 -0
- package/dist/create/server-source/crates/feltdb/src/tcp_transport.rs +6 -8
- package/dist/create/server-source/crates/feltdb/src/transaction_api.rs +24 -35
- package/dist/create/server-source/crates/feltdb/src/transaction_invariants.rs +24 -8
- package/dist/create/server-source/crates/feltdb/src/transaction_preconditions.rs +248 -59
- package/dist/create/server-source/crates/feltdb/src/transactions.rs +17 -20
- package/dist/create/server-source/crates/feltdb/src/trigger_contract.rs +749 -0
- package/dist/create/server-source/crates/feltdb/src/worker_mesh.rs +1 -0
- package/dist/create/server-source/crates/feltdb/src/workload.rs +512 -4
- package/dist/create/server-source/crates/feltdb/src/workload_diagnostics.rs +442 -0
- package/dist/create/server-source/crates/feltdb/tests/branching_evidence.rs +299 -0
- package/dist/create/server-source/crates/feltdb/tests/current_revision_authority_evidence.rs +288 -0
- package/dist/create/server-source/crates/feltdb/tests/durable_format_compatibility.rs +392 -0
- package/dist/create/server-source/crates/feltdb/tests/feltdb_state_boundary_tests.rs +436 -220
- package/dist/create/server-source/crates/feltdb/tests/fixtures/state_conflict_contract_corpus.json +1916 -0
- package/dist/create/server-source/crates/feltdb/tests/fixtures/state_diff_contract_corpus.json +1878 -0
- package/dist/create/server-source/crates/feltdb/tests/fixtures/trigger_contract_corpus.json +1862 -0
- package/dist/create/server-source/crates/feltdb/tests/pr34_query_collection.rs +234 -0
- package/dist/create/server-source/crates/feltdb/tests/pr35_equality_index.rs +947 -0
- package/dist/create/server-source/crates/feltdb/tests/pr7_self_authorization_proof.rs +5 -8
- package/dist/create/server-source/crates/feltdb/tests/pr8_vocabulary_assessment.rs +52 -44
- package/dist/create/server-source/crates/feltdb/tests/pr9_phase2_boundary_tests.rs +33 -16
- package/dist/create/server-source/crates/feltdb/tests/pr9_phase3a_path_a_tests.rs +22 -7
- package/dist/create/server-source/crates/feltdb/tests/pr9_phase3c_authorized_mutations.rs +41 -22
- package/dist/create/server-source/crates/feltdb/tests/pr9_phase3c_role_based_authorization.rs +25 -8
- package/dist/create/server-source/crates/feltdb/tests/pr9_phase3c_simple_auth_delete.rs +9 -6
- package/dist/create/server-source/crates/feltdb/tests/pr9_phase3c_team_delete_role_authorization.rs +120 -69
- package/dist/create/server-source/crates/feltdb/tests/pr9_teams_role_based_access.rs +21 -10
- package/dist/create/server-source/crates/feltdb/tests/production_readiness_contract.rs +1032 -0
- package/dist/create/server-source/crates/feltdb/tests/reconciliation_application.rs +868 -0
- package/dist/create/server-source/crates/feltdb/tests/reconciliation_wire_format_evidence.rs +221 -0
- package/dist/create/server-source/crates/feltdb/tests/resource_scoped_revisions.rs +338 -0
- package/dist/create/server-source/crates/feltdb/tests/revision_identity_contract.rs +1039 -0
- package/dist/create/server-source/crates/feltdb/tests/revision_model_decision.rs +739 -0
- package/dist/create/server-source/crates/feltdb/tests/revision_retention_boundary_evidence.rs +427 -0
- package/dist/create/server-source/crates/feltdb/tests/saas_authorization_integration.rs +3 -3
- package/dist/create/server-source/crates/feltdb/tests/saas_invitation_lifecycle.rs +25 -22
- package/dist/create/server-source/crates/feltdb/tests/state_conflict_contract_conformance.rs +1799 -0
- package/dist/create/server-source/crates/feltdb/tests/state_diff_contract_conformance.rs +1316 -0
- package/dist/create/server-source/crates/feltdb/tests/state_model_integration.rs +53 -61
- package/dist/create/server-source/crates/feltdb/tests/state_persistence_integration.rs +156 -61
- package/dist/create/server-source/crates/feltdb/tests/state_store_boundary_evidence.rs +299 -0
- package/dist/create/server-source/crates/feltdb/tests/sync_divergence_evidence.rs +255 -0
- package/dist/create/server-source/crates/feltdb/tests/three_way_input_boundary_evidence.rs +249 -0
- package/dist/create/server-source/crates/feltdb/tests/trigger_contract_conformance.rs +994 -0
- package/dist/create/server-source/crates/feltdb-server/src/app_state.rs +2 -1
- package/dist/create/server-source/crates/feltdb-server/src/audit.rs +1137 -29
- package/dist/create/server-source/crates/feltdb-server/src/auth.rs +164 -13
- package/dist/create/server-source/crates/feltdb-server/src/main.rs +800 -34
- package/dist/db.d.ts +33 -34
- package/dist/db.d.ts.map +1 -1
- package/dist/db.js +74 -20
- package/dist/deployment.d.ts +30 -0
- package/dist/deployment.d.ts.map +1 -0
- package/dist/deployment.js +130 -0
- package/dist/embedded-transaction.d.ts +22 -4
- package/dist/embedded-transaction.d.ts.map +1 -1
- package/dist/embedded-transaction.js +51 -5
- package/dist/feltdb.d.ts +14 -2
- package/dist/feltdb.d.ts.map +1 -1
- package/dist/file-db.js +1 -1
- package/dist/http-client.d.ts +14 -0
- package/dist/http-client.d.ts.map +1 -1
- package/dist/http-client.js +23 -5
- package/dist/http-db.d.ts +119 -1
- package/dist/http-db.d.ts.map +1 -1
- package/dist/http-db.js +346 -31
- package/dist/index-core.d.ts +2 -0
- package/dist/index-core.d.ts.map +1 -1
- package/dist/index-core.js +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -0
- package/dist/indexeddb-db.d.ts.map +1 -1
- package/dist/indexeddb-db.js +35 -21
- package/dist/managed-recovery.d.ts +192 -0
- package/dist/managed-recovery.d.ts.map +1 -0
- package/dist/managed-recovery.js +242 -0
- package/dist/memory-db.js +1 -1
- package/dist/studio-app/assets/{feltdb_wasm-DB8cX151.js → feltdb_wasm-DaNwCLRX.js} +1 -1
- package/dist/studio-app/assets/feltdb_wasm_bg-DnsHNv6g.wasm +0 -0
- package/dist/studio-app/assets/index-j8IlhNqJ.js +29 -0
- package/dist/studio-app/index.html +1 -1
- package/dist/transaction.d.ts +30 -0
- package/dist/transaction.d.ts.map +1 -1
- package/dist/transaction.js +41 -0
- package/dist/wasm/feltdb_wasm_bg.wasm +0 -0
- package/dist/workload.d.ts +2 -1
- package/dist/workload.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/studio-app/assets/feltdb_wasm_bg-ClhDHp0S.wasm +0 -0
- package/dist/studio-app/assets/index-B0k4UAlI.js +0 -29
|
@@ -135,7 +135,9 @@ pub struct CapabilityBinding {
|
|
|
135
135
|
#[serde(default = "public_capability_visibility")]
|
|
136
136
|
pub visibility: String,
|
|
137
137
|
}
|
|
138
|
-
fn public_capability_visibility() -> String {
|
|
138
|
+
fn public_capability_visibility() -> String {
|
|
139
|
+
"public".into()
|
|
140
|
+
}
|
|
139
141
|
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
|
|
140
142
|
pub struct SecretReference {
|
|
141
143
|
pub binding: String,
|
|
@@ -381,11 +383,16 @@ pub struct ValidationReport {
|
|
|
381
383
|
fn is_valid_policy_subject(subject: &str) -> bool {
|
|
382
384
|
subject.split('|').map(str::trim).all(|term| {
|
|
383
385
|
matches!(term, "authenticated" | "owner" | "member")
|
|
384
|
-
|| term
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
386
|
+
|| term
|
|
387
|
+
.strip_prefix("self(")
|
|
388
|
+
.and_then(|value| value.strip_suffix(')'))
|
|
389
|
+
.is_some_and(|field| {
|
|
390
|
+
let mut characters = field.chars();
|
|
391
|
+
characters
|
|
392
|
+
.next()
|
|
393
|
+
.is_some_and(|value| value == '_' || value.is_ascii_alphabetic())
|
|
394
|
+
&& characters.all(|value| value == '_' || value.is_ascii_alphanumeric())
|
|
395
|
+
})
|
|
389
396
|
})
|
|
390
397
|
}
|
|
391
398
|
|
|
@@ -559,8 +566,15 @@ pub fn validate_manifest(
|
|
|
559
566
|
.map(|v| v.name.as_str())
|
|
560
567
|
.collect();
|
|
561
568
|
for capability in &manifest.capabilities {
|
|
562
|
-
if !matches!(
|
|
563
|
-
|
|
569
|
+
if !matches!(
|
|
570
|
+
capability.visibility.as_str(),
|
|
571
|
+
"public" | "agent" | "workflow" | "internal"
|
|
572
|
+
) {
|
|
573
|
+
issues.push(issue(
|
|
574
|
+
"semantic",
|
|
575
|
+
format!("capabilities.{}.visibility", capability.name),
|
|
576
|
+
"visibility must be public, agent, workflow, or internal",
|
|
577
|
+
));
|
|
564
578
|
}
|
|
565
579
|
}
|
|
566
580
|
let workflows: BTreeSet<_> = manifest.workflows.iter().map(|v| v.name.as_str()).collect();
|
|
@@ -743,7 +757,11 @@ pub fn validate_manifest(
|
|
|
743
757
|
}
|
|
744
758
|
for (index, module) in manifest.modules.iter().enumerate() {
|
|
745
759
|
if contains_plaintext_secret(module) || module.get("value").is_some() {
|
|
746
|
-
issues.push(issue(
|
|
760
|
+
issues.push(issue(
|
|
761
|
+
"security",
|
|
762
|
+
format!("modules.{index}"),
|
|
763
|
+
"module contracts may declare secret requirements but never secret values",
|
|
764
|
+
));
|
|
747
765
|
}
|
|
748
766
|
}
|
|
749
767
|
for environment in &manifest.environments {
|
|
@@ -881,7 +899,11 @@ fn sorted(mut manifest: ApplicationManifest) -> ApplicationManifest {
|
|
|
881
899
|
agent.capabilities.sort();
|
|
882
900
|
}
|
|
883
901
|
sort_name!(manifest.capabilities);
|
|
884
|
-
manifest.modules.sort_by(|a, b|
|
|
902
|
+
manifest.modules.sort_by(|a, b| {
|
|
903
|
+
a.get("id")
|
|
904
|
+
.and_then(Value::as_str)
|
|
905
|
+
.cmp(&b.get("id").and_then(Value::as_str))
|
|
906
|
+
});
|
|
885
907
|
sort_name!(manifest.connections);
|
|
886
908
|
sort_name!(manifest.policies);
|
|
887
909
|
sort_name!(manifest.ui.bindings);
|
|
@@ -1202,14 +1224,20 @@ impl ApplicationStore {
|
|
|
1202
1224
|
.records
|
|
1203
1225
|
.write()
|
|
1204
1226
|
.map_err(|_| "application store lock poisoned")?;
|
|
1205
|
-
r.drafts
|
|
1206
|
-
|
|
1207
|
-
r.
|
|
1208
|
-
|
|
1227
|
+
r.drafts
|
|
1228
|
+
.retain(|value| value.application_id != application_id);
|
|
1229
|
+
r.revisions
|
|
1230
|
+
.retain(|value| value.application_id != application_id);
|
|
1231
|
+
r.promotions
|
|
1232
|
+
.retain(|value| value.application_id != application_id);
|
|
1233
|
+
r.previews
|
|
1234
|
+
.retain(|value| value.application_id != application_id);
|
|
1209
1235
|
r.environment_pointers.remove(application_id);
|
|
1210
|
-
r.audit
|
|
1236
|
+
r.audit
|
|
1237
|
+
.retain(|value| value.application_id != application_id);
|
|
1211
1238
|
r.untrusted_revisions.remove(application_id);
|
|
1212
|
-
r.recoveries
|
|
1239
|
+
r.recoveries
|
|
1240
|
+
.retain(|value| value.application_id != application_id);
|
|
1213
1241
|
self.persist(&r)
|
|
1214
1242
|
}
|
|
1215
1243
|
fn event(
|
|
@@ -2329,27 +2357,78 @@ mod tests {
|
|
|
2329
2357
|
let s = store("revision-recovery");
|
|
2330
2358
|
let d = s.create_draft("t", "a", "App", "owner", None).unwrap();
|
|
2331
2359
|
let corrupt = s.commit("t", "a", &d.draft_id, "owner").unwrap();
|
|
2332
|
-
s.move_environment_pointer(
|
|
2333
|
-
"
|
|
2334
|
-
|
|
2360
|
+
s.move_environment_pointer(
|
|
2361
|
+
"t",
|
|
2362
|
+
"a",
|
|
2363
|
+
&corrupt.revision_id,
|
|
2364
|
+
"staging",
|
|
2365
|
+
None,
|
|
2366
|
+
"owner",
|
|
2367
|
+
"initial",
|
|
2368
|
+
true,
|
|
2369
|
+
false,
|
|
2370
|
+
)
|
|
2371
|
+
.unwrap();
|
|
2372
|
+
let d = s
|
|
2373
|
+
.create_draft("t", "a", "App", "owner", Some(&corrupt.revision_id))
|
|
2374
|
+
.unwrap();
|
|
2335
2375
|
let clean = s.commit("t", "a", &d.draft_id, "owner").unwrap();
|
|
2336
2376
|
|
|
2337
2377
|
// Historical source corruption must not prevent recovery away from it.
|
|
2338
2378
|
{
|
|
2339
2379
|
let mut records = s.records.write().unwrap();
|
|
2340
|
-
records
|
|
2341
|
-
.
|
|
2380
|
+
records
|
|
2381
|
+
.revisions
|
|
2382
|
+
.iter_mut()
|
|
2383
|
+
.find(|value| value.revision_id == corrupt.revision_id)
|
|
2384
|
+
.unwrap()
|
|
2385
|
+
.manifest
|
|
2386
|
+
.metadata
|
|
2387
|
+
.name = "corrupted without updating its integrity hash".into();
|
|
2342
2388
|
s.persist(&records).unwrap();
|
|
2343
2389
|
}
|
|
2344
|
-
let recovered = s
|
|
2345
|
-
|
|
2346
|
-
|
|
2390
|
+
let recovered = s
|
|
2391
|
+
.recover_environment_pointer(
|
|
2392
|
+
"t",
|
|
2393
|
+
"a",
|
|
2394
|
+
"staging",
|
|
2395
|
+
&corrupt.revision_id,
|
|
2396
|
+
&clean.revision_id,
|
|
2397
|
+
"sherpa",
|
|
2398
|
+
"Replace corrupt historical revision",
|
|
2399
|
+
"ELEVATED",
|
|
2400
|
+
"recovery-1",
|
|
2401
|
+
)
|
|
2402
|
+
.unwrap();
|
|
2347
2403
|
assert_eq!(recovered.target_revision, clean.revision_id);
|
|
2348
|
-
assert_eq!(
|
|
2349
|
-
|
|
2350
|
-
|
|
2351
|
-
|
|
2352
|
-
|
|
2404
|
+
assert_eq!(
|
|
2405
|
+
s.recover_environment_pointer(
|
|
2406
|
+
"t",
|
|
2407
|
+
"a",
|
|
2408
|
+
"staging",
|
|
2409
|
+
&corrupt.revision_id,
|
|
2410
|
+
&clean.revision_id,
|
|
2411
|
+
"sherpa",
|
|
2412
|
+
"Replace corrupt historical revision",
|
|
2413
|
+
"ELEVATED",
|
|
2414
|
+
"recovery-1"
|
|
2415
|
+
)
|
|
2416
|
+
.unwrap(),
|
|
2417
|
+
recovered
|
|
2418
|
+
);
|
|
2419
|
+
assert!(s
|
|
2420
|
+
.move_environment_pointer(
|
|
2421
|
+
"t",
|
|
2422
|
+
"a",
|
|
2423
|
+
&corrupt.revision_id,
|
|
2424
|
+
"staging",
|
|
2425
|
+
Some(&clean.revision_id),
|
|
2426
|
+
"owner",
|
|
2427
|
+
"rollback",
|
|
2428
|
+
true,
|
|
2429
|
+
true
|
|
2430
|
+
)
|
|
2431
|
+
.unwrap_err()
|
|
2353
2432
|
.contains("untrusted"));
|
|
2354
2433
|
|
|
2355
2434
|
let reloaded = ApplicationStore::load(s.path.clone()).unwrap();
|
|
@@ -2528,7 +2607,11 @@ mod tests {
|
|
|
2528
2607
|
});
|
|
2529
2608
|
|
|
2530
2609
|
let report = validate_manifest(&manifest, "tenant", "app", None);
|
|
2531
|
-
assert!(
|
|
2610
|
+
assert!(
|
|
2611
|
+
report.valid,
|
|
2612
|
+
"composed identity policy should be valid: {:?}",
|
|
2613
|
+
report.issues
|
|
2614
|
+
);
|
|
2532
2615
|
}
|
|
2533
2616
|
|
|
2534
2617
|
#[test]
|