Files
jobtrackingapp/docs/redesign/phase-9/rd21-remediation/before-regressions.json
T

163 lines
7.0 KiB
JSON

{
"purpose": "Actual failing evidence; focused reruns are not added to final full-suite totals.",
"originalBrowser": {
"id": "RD21",
"career": {
"staleStatus": 200,
"expectedFirstSummary": [
"First editor committed summary"
],
"actualSummary": [
"Initial summary"
],
"lostFirstEdit": true
},
"job": {
"staleStatus": 204,
"expectedFirstTitle": "First editor committed title",
"actualTitle": "Original job title",
"lostFirstEdit": true
},
"safetyQualification": "FAIL: stale writes can overwrite acknowledged edits",
"limitation": "This passing characterization records observed behavior; it does not accept unsafe stale writes or provide a new revision contract. Creation-intent idempotency remains separate."
},
"native": [
{
"stage": "Baseline Career stale success and rejected-operation partial commit",
"artifact": ".artifacts/rd21-career-red/rd21-career-red.trx",
"sha256": "8bab2511c7fff78ea365444680d00511a2894f6913d447f037f2cf2a0b4ece30",
"counters": {
"total": "2",
"executed": "2",
"passed": "0",
"failed": "2",
"error": "0",
"timeout": "0",
"aborted": "0",
"inconclusive": "0",
"passedButRunAborted": "0",
"notRunnable": "0",
"notExecuted": "0",
"disconnected": "0",
"warning": "0",
"completed": "0",
"inProgress": "0",
"pending": "0"
},
"failures": [
{
"name": "JobTrackerApi.Tests.Rd21CareerPersistenceTests.Identity_failure_rolls_back_canonical_children_history_and_projection",
"message": "Assert.Empty() Failure: Collection was not empty\r\nCollection: [CareerProfile { Certifications = [], CreatedAtUtc = 2026-10-23T05:48:16.1454440+00:00, Education = [], Experiences = [], Id = 1, \u00b7\u00b7\u00b7 }]"
},
{
"name": "JobTrackerApi.Tests.Rd21CareerPersistenceTests.Independent_stale_snapshot_cannot_replace_acknowledged_career_edit",
"message": "Assert.IsType() Failure: Value is not the exact type\r\nExpected: typeof(Microsoft.AspNetCore.Mvc.ConflictObjectResult)\r\nActual: typeof(Microsoft.AspNetCore.Mvc.OkObjectResult)"
}
]
},
{
"stage": "Generic guard already present; related cover/application draft writers still overwrite persisted approved text",
"artifact": ".artifacts/rd21/native-red/rd21-job-red.trx",
"sha256": "57b7aef48c879b53ec57080a133ddbad04ac7f174efbcea85bbc49426a02edc7",
"counters": {
"total": "4",
"executed": "4",
"passed": "2",
"failed": "2",
"error": "0",
"timeout": "0",
"aborted": "0",
"inconclusive": "0",
"passedButRunAborted": "0",
"notRunnable": "0",
"notExecuted": "0",
"disconnected": "0",
"warning": "0",
"completed": "0",
"inProgress": "0",
"pending": "0"
},
"failures": [
{
"name": "JobTrackerApi.Tests.Rd21JobPersistenceTests.Related_text_save_cannot_silently_replace_a_newer_acknowledged_draft(coverLetter: False)",
"message": "Assert.Equal() Failure: Strings differ\r\n \u2193 (pos 0)\r\nExpected: \"First approved text\"\r\nActual: \"Stale snapshot text\"\r\n \u2191 (pos 0)"
},
{
"name": "JobTrackerApi.Tests.Rd21JobPersistenceTests.Related_text_save_cannot_silently_replace_a_newer_acknowledged_draft(coverLetter: True)",
"message": "Assert.Equal() Failure: Strings differ\r\n \u2193 (pos 0)\r\nExpected: \"First approved text\"\r\nActual: \"Stale snapshot text\"\r\n \u2191 (pos 0)"
}
]
},
{
"stage": "Legacy Identity endpoint still bypasses canonical save boundary",
"artifact": ".artifacts/rd21/legacy-cv-red/legacy-cv-red.trx",
"sha256": "f59b27ddf3718bb2a9f2a7a2fee96179b2f4dd3af0e25e7b4c0ba0c8276837a1",
"counters": {
"total": "3",
"executed": "3",
"passed": "0",
"failed": "3",
"error": "0",
"timeout": "0",
"aborted": "0",
"inconclusive": "0",
"passedButRunAborted": "0",
"notRunnable": "0",
"notExecuted": "0",
"disconnected": "0",
"warning": "0",
"completed": "0",
"inProgress": "0",
"pending": "0"
},
"failures": [
{
"name": "JobTrackerApi.Tests.AuthAndSystemControllerTests.Legacy_profile_endpoint_cannot_bypass_canonical_revision_guards(text: \"stale text\", structured: null)",
"message": "Assert.IsType() Failure: Value is not the exact type\r\nExpected: typeof(Microsoft.AspNetCore.Mvc.BadRequestObjectResult)\r\nActual: typeof(Microsoft.AspNetCore.Mvc.NoContentResult)"
},
{
"name": "JobTrackerApi.Tests.AuthAndSystemControllerTests.Legacy_profile_endpoint_cannot_bypass_canonical_revision_guards(text: \"\", structured: \"\")",
"message": "Assert.IsType() Failure: Value is not the exact type\r\nExpected: typeof(Microsoft.AspNetCore.Mvc.BadRequestObjectResult)\r\nActual: typeof(Microsoft.AspNetCore.Mvc.NoContentResult)"
},
{
"name": "JobTrackerApi.Tests.AuthAndSystemControllerTests.Legacy_profile_endpoint_cannot_bypass_canonical_revision_guards(text: null, structured: \"{\\\"summary\\\":[\\\"stale\\\"]}\")",
"message": "Assert.IsType() Failure: Value is not the exact type\r\nExpected: typeof(Microsoft.AspNetCore.Mvc.BadRequestObjectResult)\r\nActual: typeof(Microsoft.AspNetCore.Mvc.NoContentResult)"
}
]
},
{
"stage": "Structured tailored CV replacement still overwrites approved text",
"artifact": ".artifacts/rd21/structured-cv-red/structured-cv-red.trx",
"sha256": "b297f11fa8a98de808470b630ef25ad49d32c4aa66a3e55ac9bfa12027997638",
"counters": {
"total": "1",
"executed": "1",
"passed": "0",
"failed": "1",
"error": "0",
"timeout": "0",
"aborted": "0",
"inconclusive": "0",
"passedButRunAborted": "0",
"notRunnable": "0",
"notExecuted": "0",
"disconnected": "0",
"warning": "0",
"completed": "0",
"inProgress": "0",
"pending": "0"
},
"failures": [
{
"name": "JobTrackerApi.Tests.Rd21JobPersistenceTests.Structured_tailored_cv_snapshot_cannot_replace_a_newer_approved_document",
"message": "Assert.Contains() Failure: Sub-string not found\r\nString: \"Professional Summary\\n- Stale CV evidence\"\r\nNot found: \"Approved CV evidence\""
}
]
}
],
"initialJobRed": {
"observed": "Both stale and unversioned job snapshot tests returned NoContentResult instead of conflict after immediate SQLite acknowledgement check.",
"limitation": "The initial runner reused its raw file path; that first two-case log was superseded. The retained later file is explicitly labeled as related-writer RED, not baseline job RED."
}
}