fix(migrations): publish canonical v13 contract
This commit is contained in:
@@ -40,7 +40,7 @@ fn plan_is_deterministic_and_committed_contract_is_current() {
|
|||||||
);
|
);
|
||||||
assert_eq!(first.stdout, second.stdout);
|
assert_eq!(first.stdout, second.stdout);
|
||||||
let plan: serde_json::Value = serde_json::from_slice(&first.stdout).unwrap();
|
let plan: serde_json::Value = serde_json::from_slice(&first.stdout).unwrap();
|
||||||
assert_eq!(plan["sequence"].as_array().unwrap().len(), 12);
|
assert_eq!(plan["sequence"].as_array().unwrap().len(), 13);
|
||||||
|
|
||||||
let checked = command(&["plan", "--check"], None);
|
let checked = command(&["plan", "--check"], None);
|
||||||
assert!(
|
assert!(
|
||||||
@@ -82,7 +82,7 @@ async fn database_only_config_can_apply_and_preflight_a_fresh_schema() {
|
|||||||
);
|
);
|
||||||
let result: serde_json::Value = serde_json::from_slice(&preflight.stdout).unwrap();
|
let result: serde_json::Value = serde_json::from_slice(&preflight.stdout).unwrap();
|
||||||
assert_eq!(result["status"], "current");
|
assert_eq!(result["status"], "current");
|
||||||
assert_eq!(result["version"], 12);
|
assert_eq!(result["version"], 13);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ fn sequence_is_deterministic_and_append_only() {
|
|||||||
MigrationAuthority::validate_sequence().unwrap();
|
MigrationAuthority::validate_sequence().unwrap();
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
first.iter().map(|item| item.version).collect::<Vec<_>>(),
|
first.iter().map(|item| item.version).collect::<Vec<_>>(),
|
||||||
vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
|
vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
|
||||||
);
|
);
|
||||||
assert_eq!(first[0].checksum, "crank-community-baseline-v1");
|
assert_eq!(first[0].checksum, "crank-community-baseline-v1");
|
||||||
assert_eq!(first[0].source_digest, BASELINE_SOURCE_SHA256);
|
assert_eq!(first[0].source_digest, BASELINE_SOURCE_SHA256);
|
||||||
|
|||||||
+4
-1
@@ -16,7 +16,7 @@ docker compose -f deploy/community/docker-compose.yml --env-file deploy/communit
|
|||||||
2. Создайте и проверьте согласованный backup PostgreSQL и artifact storage. Для первой пустой установки зафиксируйте, что восстанавливать нечего.
|
2. Создайте и проверьте согласованный backup PostgreSQL и artifact storage. Для первой пустой установки зафиксируйте, что восстанавливать нечего.
|
||||||
3. Проверьте immutable plan: `cargo run -p admin-api --bin crank-migrate -- plan --check` в source checkout либо `<compose> run --rm migrate crank-migrate plan` для образа.
|
3. Проверьте immutable plan: `cargo run -p admin-api --bin crank-migrate -- plan --check` в source checkout либо `<compose> run --rm migrate crank-migrate plan` для образа.
|
||||||
4. Примените sequence: `<compose> run --rm migrate crank-migrate apply`.
|
4. Примените sequence: `<compose> run --rm migrate crank-migrate apply`.
|
||||||
5. Повторите preflight и убедитесь в `{"status":"current","version":12}`.
|
5. Повторите preflight и убедитесь в `{"status":"current","version":13}`.
|
||||||
6. Только теперь запускайте long-running services: `<compose> up -d`.
|
6. Только теперь запускайте long-running services: `<compose> up -d`.
|
||||||
|
|
||||||
Обычный `up` также содержит обязательный migration job, но при upgrade он не заменяет предварительные preflight и backup. Migrator делает до десяти bounded попыток подключения с секундной паузой и затем безопасно завершается ошибкой.
|
Обычный `up` также содержит обязательный migration job, но при upgrade он не заменяет предварительные preflight и backup. Migrator делает до десяти bounded попыток подключения с секундной паузой и затем безопасно завершается ошибкой.
|
||||||
@@ -90,6 +90,9 @@ cargo run -p admin-api --bin crank-migrate -- plan --check
|
|||||||
sensitivity и source lifecycle принадлежат scoped relation. Claim token/expiry
|
sensitivity и source lifecycle принадлежат scoped relation. Claim token/expiry
|
||||||
зарезервированы bounded all-or-none contract для последующего reconciliation,
|
зарезервированы bounded all-or-none contract для последующего reconciliation,
|
||||||
но эта версия не запускает cleanup и не удаляет physical blobs.
|
но эта версия не запускает cleanup и не удаляет physical blobs.
|
||||||
|
- V13 — expand-only indexes, поддерживающие bounded artifact/import cleanup и
|
||||||
|
reconciliation ранее зарезервированных claim token/expiry; эта версия сама
|
||||||
|
не выполняет cleanup, не переписывает данные и не удаляет physical blobs.
|
||||||
- Каждая версия имеет contiguous `i64` version, стабильное имя, lowercase SHA-256, owner, phase, explicit readable schema min/max и backfill policy.
|
- Каждая версия имеет contiguous `i64` version, стабильное имя, lowercase SHA-256, owner, phase, explicit readable schema min/max и backfill policy.
|
||||||
- `migrate` требует bounded cursor/batch policy; `contract` дополнительно требует tracked compatibility evidence и закрытого окна.
|
- `migrate` требует bounded cursor/batch policy; `contract` дополнительно требует tracked compatibility evidence и закрытого окна.
|
||||||
- Добавление descriptor без executable implementation блокируется `invalid_contract` до DB I/O.
|
- Добавление descriptor без executable implementation блокируется `invalid_contract` до DB I/O.
|
||||||
|
|||||||
@@ -192,6 +192,22 @@
|
|||||||
"source_digest": "052058da53cd861b2a1af81243b34cc35204d665a9276f8ece563e061f8ebbfe",
|
"source_digest": "052058da53cd861b2a1af81243b34cc35204d665a9276f8ece563e061f8ebbfe",
|
||||||
"transactional": true,
|
"transactional": true,
|
||||||
"version": 12
|
"version": 12
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"backfill": {
|
||||||
|
"kind": "none"
|
||||||
|
},
|
||||||
|
"checksum": "abe822c967e1b2cc3966ede988e05eb2d9b2a062b539c45aaa8cad677395ab05",
|
||||||
|
"compatibility": "n-minus-one-readable",
|
||||||
|
"contract_evidence": null,
|
||||||
|
"name": "artifact-cleanup-indexes-v13",
|
||||||
|
"owner": "crank-registry",
|
||||||
|
"phase": "expand",
|
||||||
|
"readable_schema_max": 13,
|
||||||
|
"readable_schema_min": 12,
|
||||||
|
"source_digest": "abe822c967e1b2cc3966ede988e05eb2d9b2a062b539c45aaa8cad677395ab05",
|
||||||
|
"transactional": true,
|
||||||
|
"version": 13
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user