Files
MikrotikManager/docs/ux-ui/acceptance/ipsec-preserve-certificate-2026-10-10.json
T

296 lines
9.2 KiB
JSON

{
"date": "2026-10-10",
"block": "12.5.115",
"deployment": {
"date": "2026-10-10",
"baseCommit": "58f5c48",
"frontendBaseContext": "build-alias112-front",
"frontendContext": "build-keepcert115-front",
"override": "app/(main)/ipsec/page.tsx",
"sourceSha256": "9e2fb7457410a837e0d9f2b0cbdb4201a0874b039f0a2f0202cc68bab6ebfd5c",
"containers": {
"backend": {
"imageTag": "mmapp-test/backend:ux-refs114",
"imageId": "sha256:df345a34f4e178b8a15fe5c537173f33a79eb15681a5e62b76a4aa7dab0017a6",
"state": "running",
"health": "healthy"
},
"frontend": {
"imageTag": "mmapp-test/frontend:ux-keepcert115",
"imageId": "sha256:98cd215a1c944f0883b0676d58a2df93ac689f488343b70b8360594848df81cf",
"state": "running",
"health": null
},
"postgres": {
"imageTag": "postgres:18-alpine",
"imageId": "sha256:77f585114c32fbca283dc835b0596f4e52b51b4c6662d7810b2f4084f60a1873",
"state": "running",
"health": "healthy"
}
}
},
"sourceByteHashMatches": true,
"native": {
"date": "2026-10-10",
"block": "12.5.115",
"name": "mm-ipsec115-1791641218646",
"cn": "mm-ipsec115-1791641218646",
"observations": [
{
"serverId": 1,
"active": [
{
".id": "*1",
"id": "CN=mm-ipsec115-1791641218646",
"state": "established",
"dynamic-address": "198.18.115.250",
"remote-address": "104.165.244.7",
"uptime": "1s"
}
],
"catalog": [
{
"name": "CN=mm-ipsec115-1791641218646",
"commonName": "CN=mm-ipsec115-1791641218646",
"certName": "ipsec-user-mm-ipsec115-1791641218646-decoy",
"online": false
},
{
"name": "mm-ipsec115-1791641218646",
"commonName": "mm-ipsec115-1791641218646",
"certName": "ipsec-user-mm-ipsec115-1791641218646",
"online": true,
"activeAddress": "198.18.115.250"
}
]
},
{
"serverId": 2,
"active": [
{
".id": "*1",
"id": "194.226.121.150",
"state": "established",
"remote-address": "194.226.121.150",
"uptime": "1s"
}
],
"catalog": []
}
],
"cleanup": [
{
"serverId": 1,
"/system/logging": true,
"/ip/ipsec/identity": true,
"/ip/ipsec/peer": true,
"/ip/ipsec/policy": true,
"/ip/ipsec/policy/group": true,
"/ip/ipsec/mode-config": true,
"/ip/ipsec/proposal": true,
"/ip/ipsec/profile": true,
"/certificate": true,
"/file": true,
"/ip/address": true,
"/ip/route": true,
"/ip/firewall/nat": true
},
{
"serverId": 2,
"/system/logging": true,
"/ip/ipsec/identity": true,
"/ip/ipsec/peer": true,
"/ip/ipsec/policy": true,
"/ip/ipsec/policy/group": true,
"/ip/ipsec/mode-config": true,
"/ip/ipsec/proposal": true,
"/ip/ipsec/profile": true,
"/certificate": true,
"/file": true,
"/ip/address": true,
"/ip/route": true,
"/ip/firewall/nat": true
}
],
"databaseWrites": "Two successful API mutations invoke history recording; deduplication may avoid new rows",
"certificate": {
"name": "ipsec-user-mm-ipsec115-1791641218646",
"common-name": "mm-ipsec115-1791641218646",
"ca": "mm-ipsec115-1791641218646-ca",
"key-usage": "digital-signature,key-encipherment,tls-client"
},
"certificates": [
[
{
"name": "mm-ipsec115-1791641218646-ca",
"trusted": "true",
"trust-store": "all",
"invalid-before": "2026-10-10 17:06:59",
"invalid-after": "2026-10-12 17:06:59",
"common-name": "mm-ipsec115-1791641218646-CA"
},
{
"name": "mm-ipsec115-1791641218646-server",
"trusted": "false",
"trust-store": "all",
"ca": "mm-ipsec115-1791641218646-ca",
"invalid-before": "2026-10-10 17:07:00",
"invalid-after": "2026-10-12 17:07:00",
"common-name": "194.226.121.150"
},
{
"name": "ipsec-user-mm-ipsec115-1791641218646",
"trusted": "false",
"trust-store": "all",
"ca": "mm-ipsec115-1791641218646-ca",
"invalid-before": "2026-10-10 17:07:01",
"invalid-after": "2026-10-12 17:07:01",
"common-name": "mm-ipsec115-1791641218646"
},
{
"name": "ipsec-user-mm-ipsec115-1791641218646-decoy",
"trusted": "false",
"trust-store": "all",
"ca": "mm-ipsec115-1791641218646-ca",
"invalid-before": "2026-10-10 17:07:01",
"invalid-after": "2026-10-12 17:07:01",
"common-name": "CN=mm-ipsec115-1791641218646"
}
],
[
{
"name": "mm-ipsec115-1791641218646-client-imported",
"trusted": "true",
"trust-store": "ipsec",
"invalid-before": "2026-10-10 16:07:01",
"invalid-after": "2026-10-12 16:07:01",
"common-name": "mm-ipsec115-1791641218646"
},
{
"name": "mm-ipsec115-1791641218646-ca-imported",
"trusted": "true",
"trust-store": "ipsec",
"invalid-before": "2026-10-10 16:06:59",
"invalid-after": "2026-10-12 16:06:59",
"common-name": "mm-ipsec115-1791641218646-CA"
}
]
],
"catalogCorrect": true,
"dnPhase": {
"active": [
{
".id": "*1",
"id": "CN=mm-ipsec115-1791641218646",
"state": "established",
"dynamic-address": "198.18.115.250",
"remote-address": "104.165.244.7",
"uptime": "1s"
}
],
"clients": [
{
"name": "CN=mm-ipsec115-1791641218646",
"commonName": "CN=mm-ipsec115-1791641218646",
"certName": "ipsec-user-mm-ipsec115-1791641218646-decoy",
"online": false
},
{
"name": "mm-ipsec115-1791641218646",
"commonName": "mm-ipsec115-1791641218646",
"certName": "ipsec-user-mm-ipsec115-1791641218646",
"online": true,
"activeAddress": "198.18.115.250"
}
],
"decoyOnline": false
},
"fqdnPhase": {
"configuredRemoteId": "fqdn:mm-ipsec115-1791641218646.example",
"nativeId": "mm-ipsec115-1791641218646.example",
"assignedAddress": "198.18.115.250",
"originalOnline": true,
"decoyOnline": false
},
"aliasName": "mm-ipsec115-1791641218646-extra",
"aliasPhase": {
"native": [
{
"id": "mm-ipsec115-1791641218646.example",
"state": "established",
"dynamic-address": "198.18.115.250"
}
],
"clients": [
{
"name": "CN=mm-ipsec115-1791641218646",
"kind": "cert",
"online": false
},
{
"name": "mm-ipsec115-1791641218646",
"kind": "cert",
"online": false,
"sessionAmbiguous": true
},
{
"name": "mm-ipsec115-1791641218646-extra",
"kind": "cert",
"online": false,
"sessionAmbiguous": true
}
],
"summary": {
"clientsTotal": 3,
"clientsOnline": 0,
"clientsSessionAmbiguous": 2
}
},
"renameReply": {
"error": "RouterOS: RouterOS API error 400 on /ip/ipsec/identity/*B: {\"detail\":\"failure: a matching identity already exists\",\"error\":400,\"message\":\"Bad Request\"}"
},
"targetGuards": {
"certificatePatch409": true,
"certificateDelete409": true,
"sharedCertificateIdentityDelete409": true,
"selectedIdentityPatchNativeMatchingConflict": true,
"bothCommentsUnchanged": true
},
"uiDelete": {
"selectedIdentityAbsent": true,
"sharedCertificateNativeIdPreserved": true,
"otherIdentityPreserved": true
},
"recovered": {
"originalOnline": true,
"sessionAmbiguous": false,
"activeAddress": "198.18.115.250",
"selectedIdentityPatch200AfterRemovingDuplicate": true,
"originalCommentRestored": true
}
},
"browserEvidence": "browser-ipsec-keepcert-2026-10-10.json",
"local": {
"eslintPassed": true,
"sourceTypeScriptPassed": true,
"productionBuildPassed": true,
"uniqueE2eAccepted": 26,
"firstRun": {
"passed": 22,
"failed": 4,
"reason": "Modal hides background buttons from accessibility tree; use includeHidden to check retained DOM rows"
},
"correctedRerun": {
"passed": 4,
"seconds": 9.8
}
},
"bounds": [
"Backend remains refs114; only frontend rebuilt",
"One real mobile UI DELETE with removeCertificate=false; four dialogs, not four deletes",
"Foreign mode-config retained by API guard and removed only by owned fixture cleanup",
"History recording invoked by DELETE and subsequent PATCH; inserted revision count not claimed",
"No full regression or new encryption/data-plane acceptance"
]
}