Files
jobtrackingapp/docs/database/mariadb-standardisation/validation.json
T
cesnimda 549b2cba5a
MariaDB persistence qualification / mariadb (push) Failing after 46s
docs(ci): record hosted MariaDB runner prerequisite failure
2026-10-24 01:55:56 +02:00

548 lines
23 KiB
JSON

{
"schemaVersion": 1,
"reportDate": "2026-10-24",
"recordedUtc": "2026-10-23T23:50:33.719141+00:00",
"baselineCommit": "0d16a691e0249fe1264bf960de5e59eaa9b87fed",
"implementationCommit": "a2c9bda0d11940e4ce1fb9fe5efa80b14ab6627b",
"branch": "codex/rd21-mariadb-standardisation",
"mainUnchanged": "5f835e54a9b74e6b71418422e28431b2af06453f",
"countsPolicy": "Distinct lanes only; focused/repeated/native/WSL/Docker runs overlap and are not added into one test total.",
"finalResults": {
"backend": {
"path": ".artifacts/mariadb/final-backend/backend.trx",
"sha256": "771884e589999f625ebbe2f5da7bbc31931d82db28363734f7fe8e88d53de0dc",
"bytes": 1616177,
"counters": {
"total": "1123",
"executed": "1123",
"passed": "1123",
"failed": "0",
"error": "0",
"timeout": "0",
"aborted": "0",
"inconclusive": "0",
"passedButRunAborted": "0",
"notRunnable": "0",
"notExecuted": "0",
"disconnected": "0",
"warning": "0",
"completed": "0",
"inProgress": "0",
"pending": "0"
}
},
"mariaDbCompose": {
"path": ".artifacts/mariadb/compose-final/mariadb.trx",
"sha256": "4e170909ddeddaed51fe52842a4a296e2ca4315b859b1db54a36e34ab8f720d6",
"bytes": 52575,
"counters": {
"total": "32",
"executed": "32",
"passed": "32",
"failed": "0",
"error": "0",
"timeout": "0",
"aborted": "0",
"inconclusive": "0",
"passedButRunAborted": "0",
"notRunnable": "0",
"notExecuted": "0",
"disconnected": "0",
"warning": "0",
"completed": "0",
"inProgress": "0",
"pending": "0"
},
"cases": [
{
"name": "JobTrackerApi.MariaDb.Tests.Rd21CareerPersistenceTests.Database_failure_after_deletion_restores_children_history_and_revision_and_clears_tracker",
"outcome": "Passed"
},
{
"name": "JobTrackerApi.MariaDb.Tests.Rd21CareerPersistenceTests.Empty_canonical_profile_preserves_legacy_raw_text_in_its_revision_zero_snapshot",
"outcome": "Passed"
},
{
"name": "JobTrackerApi.MariaDb.Tests.Rd21CareerPersistenceTests.Extraction_history_returns_only_the_ten_newest_owned_runs_with_exact_metadata",
"outcome": "Passed"
},
{
"name": "JobTrackerApi.MariaDb.Tests.Rd21CareerPersistenceTests.Reviewed_import_commits_or_rolls_back_canonical_projection_and_application_metadata(identitySucceeds: False)",
"outcome": "Passed"
},
{
"name": "JobTrackerApi.MariaDb.Tests.Rd21JobPersistenceTests.Related_text_save_cannot_silently_replace_a_newer_acknowledged_draft(coverLetter: True)",
"outcome": "Passed"
},
{
"name": "JobTrackerApi.MariaDb.Tests.StartupAndLockTests.Unsafe_or_missing_admin_configuration_fails_closed(connection: \"Server=192.0.2.1;Database=development;User ID=test\")",
"outcome": "Passed"
},
{
"name": "JobTrackerApi.MariaDb.Tests.Rd21CareerPersistenceTests.Stale_tracked_entity_is_guarded_at_database_update_and_stale_restore_is_rejected",
"outcome": "Passed"
},
{
"name": "JobTrackerApi.MariaDb.Tests.Rd21CareerPersistenceTests.Identity_failure_rolls_back_canonical_children_history_and_projection",
"outcome": "Passed"
},
{
"name": "JobTrackerApi.MariaDb.Tests.Rd21CareerPersistenceTests.Reviewed_import_commits_or_rolls_back_canonical_projection_and_application_metadata(identitySucceeds: True)",
"outcome": "Passed"
},
{
"name": "JobTrackerApi.MariaDb.Tests.StartupAndLockTests.Open_reader_does_not_block_independent_usage_and_identity_writes",
"outcome": "Passed"
},
{
"name": "JobTrackerApi.MariaDb.Tests.Rd21JobPersistenceTests.Structured_tailored_cv_snapshot_cannot_replace_a_newer_approved_document",
"outcome": "Passed"
},
{
"name": "JobTrackerApi.MariaDb.Tests.StartupAndLockTests.Rd21_additive_migration_preserves_existing_job_fields_and_backfills_revision_one",
"outcome": "Passed"
},
{
"name": "JobTrackerApi.MariaDb.Tests.Rd21JobPersistenceTests.Stale_or_unversioned_snapshot_cannot_erase_an_acknowledged_job_edit(omitRevision: False)",
"outcome": "Passed"
},
{
"name": "JobTrackerApi.MariaDb.Tests.Rd21CareerPersistenceTests.Competing_first_save_sources_have_one_acknowledged_winner",
"outcome": "Passed"
},
{
"name": "JobTrackerApi.MariaDb.Tests.StartupAndLockTests.Unsafe_or_missing_admin_configuration_fails_closed(connection: null)",
"outcome": "Passed"
},
{
"name": "JobTrackerApi.MariaDb.Tests.StartupAndLockTests.Admin_database_name_is_never_used_as_the_test_database",
"outcome": "Passed"
},
{
"name": "JobTrackerApi.MariaDb.Tests.Rd21CareerPersistenceTests.Replacement_restore_parse_and_import_fail_closed_without_valid_revision(expectedVersion: null)",
"outcome": "Passed"
},
{
"name": "JobTrackerApi.MariaDb.Tests.StartupAndLockTests.Unsafe_or_missing_admin_configuration_fails_closed(connection: \"Server=database.example.test;User ID=test;Password\"\u00b7\u00b7\u00b7)",
"outcome": "Passed"
},
{
"name": "JobTrackerApi.MariaDb.Tests.Rd21CareerPersistenceTests.Import_acceptance_requires_the_revision_shown_in_its_diff",
"outcome": "Passed"
},
{
"name": "JobTrackerApi.MariaDb.Tests.StartupAndLockTests.Fresh_repeated_and_populated_startup_preserve_owned_data_and_complete_migrations",
"outcome": "Passed"
},
{
"name": "JobTrackerApi.MariaDb.Tests.StartupAndLockTests.Full_startup_creates_every_table_and_column_required_by_the_persisted_EF_model",
"outcome": "Passed"
},
{
"name": "JobTrackerApi.MariaDb.Tests.Rd21CareerPersistenceTests.Parsing_commits_or_rolls_back_its_entire_import_application(identitySucceeds: False)",
"outcome": "Passed"
},
{
"name": "JobTrackerApi.MariaDb.Tests.Rd21CareerPersistenceTests.Independent_stale_snapshot_cannot_replace_acknowledged_career_edit",
"outcome": "Passed"
},
{
"name": "JobTrackerApi.MariaDb.Tests.Rd21JobPersistenceTests.Failed_job_transaction_cannot_acknowledge_or_leave_partial_data_for_a_later_save",
"outcome": "Passed"
},
{
"name": "JobTrackerApi.MariaDb.Tests.Rd21JobPersistenceTests.Held_writer_timeout_rolls_back_and_a_reviewed_save_recovers_after_release",
"outcome": "Passed"
},
{
"name": "JobTrackerApi.MariaDb.Tests.Rd21CareerPersistenceTests.Parsing_commits_or_rolls_back_its_entire_import_application(identitySucceeds: True)",
"outcome": "Passed"
},
{
"name": "JobTrackerApi.MariaDb.Tests.Rd21JobPersistenceTests.Stale_or_unversioned_snapshot_cannot_erase_an_acknowledged_job_edit(omitRevision: True)",
"outcome": "Passed"
},
{
"name": "JobTrackerApi.MariaDb.Tests.Rd21CareerPersistenceTests.Editor_snapshot_uses_relational_canonical_source_and_never_writes_during_read",
"outcome": "Passed"
},
{
"name": "JobTrackerApi.MariaDb.Tests.Rd21JobPersistenceTests.Related_text_save_cannot_silently_replace_a_newer_acknowledged_draft(coverLetter: False)",
"outcome": "Passed"
},
{
"name": "JobTrackerApi.MariaDb.Tests.Rd21CareerPersistenceTests.Replacement_restore_parse_and_import_fail_closed_without_valid_revision(expectedVersion: -1)",
"outcome": "Passed"
},
{
"name": "JobTrackerApi.MariaDb.Tests.Rd21JobPersistenceTests.Versioned_job_save_cannot_cross_tenant_job_or_company_ownership",
"outcome": "Passed"
},
{
"name": "JobTrackerApi.MariaDb.Tests.Rd21JobPersistenceTests.Write_that_overlaps_a_delayed_save_wins_without_partial_events_or_opportunity_changes",
"outcome": "Passed"
}
],
"runner": {
"startedUtc": "2026-10-23T23:45:02.659493+00:00",
"finishedUtc": "2026-10-23T23:45:35.164110+00:00",
"mode": "compose",
"expectedVersion": "12.2.2",
"project": "jobtracker-it-bab4e2d90fda49aca25affafc282e335",
"exitCode": 0,
"commands": [
{
"command": [
"docker",
"compose",
"--project-name",
"jobtracker-it-bab4e2d90fda49aca25affafc282e335",
"--project-directory",
"E:\\Storage\\Projects\\Active\\Job tracker",
"-f",
"E:\\Storage\\Projects\\Active\\Job tracker\\docker-compose.database.yml",
"--profile",
"integration",
"up",
"-d",
"--wait",
"--wait-timeout",
"120",
"mariadb-test"
],
"log": "E:\\Storage\\Projects\\Active\\Job tracker\\.artifacts\\mariadb\\compose-final\\compose-start.log",
"exitCode": 0
},
{
"command": [
"C:/Users/Connor/.dotnet/dotnet.exe",
"restore",
"JobTrackerApi.MariaDb.Tests/JobTrackerApi.MariaDb.Tests.csproj",
"--locked-mode"
],
"log": "E:\\Storage\\Projects\\Active\\Job tracker\\.artifacts\\mariadb\\compose-final\\restore.log",
"exitCode": 0
},
{
"command": [
"C:/Users/Connor/.dotnet/dotnet.exe",
"test",
"JobTrackerApi.MariaDb.Tests/JobTrackerApi.MariaDb.Tests.csproj",
"--configuration",
"Release",
"--no-restore",
"--logger",
"trx;LogFileName=mariadb.trx",
"--results-directory",
"E:\\Storage\\Projects\\Active\\Job tracker\\.artifacts\\mariadb\\compose-final"
],
"log": "E:\\Storage\\Projects\\Active\\Job tracker\\.artifacts\\mariadb\\compose-final\\tests.log",
"exitCode": 0
},
{
"command": [
"docker",
"compose",
"--project-name",
"jobtracker-it-bab4e2d90fda49aca25affafc282e335",
"--project-directory",
"E:\\Storage\\Projects\\Active\\Job tracker",
"-f",
"E:\\Storage\\Projects\\Active\\Job tracker\\docker-compose.database.yml",
"--profile",
"integration",
"logs",
"--no-color",
"mariadb-test"
],
"log": "E:\\Storage\\Projects\\Active\\Job tracker\\.artifacts\\mariadb\\compose-final\\server.log",
"exitCode": 0
},
{
"command": [
"docker",
"compose",
"--project-name",
"jobtracker-it-bab4e2d90fda49aca25affafc282e335",
"--project-directory",
"E:\\Storage\\Projects\\Active\\Job tracker",
"-f",
"E:\\Storage\\Projects\\Active\\Job tracker\\docker-compose.database.yml",
"--profile",
"integration",
"rm",
"--stop",
"--force",
"mariadb-test"
],
"log": "E:\\Storage\\Projects\\Active\\Job tracker\\.artifacts\\mariadb\\compose-final\\compose-cleanup.log",
"exitCode": 0
}
]
},
"runnerEvidence": {
"path": ".artifacts/mariadb/compose-final/run.json",
"sha256": "08ac2f67e8007e6b83ba2e812d745bf40a0f157d4054747b6ae681a41b9b609a",
"bytes": 3047
}
},
"mariaDbBrowser": {
"path": ".artifacts/mariadb/browser-mariadb.json",
"sha256": "debce9f0f52d1e54001c00972c7f93be80fa2b4a2c71f75360ce1e6a55dd662e",
"bytes": 8628,
"stats": {
"startTime": "2026-10-23T23:47:33.278Z",
"duration": 12135.389000000001,
"expected": 1,
"skipped": 0,
"unexpected": 0,
"flaky": 0
},
"productionQualification": false,
"process": {
"finishedUtc": "2026-10-23T23:47:45.5638011Z",
"startedUtc": "2026-10-23T23:47:32.6487673Z",
"exitCode": 0,
"generatedSchema": "jt_it_79b5902ffa2544a4a45a8eac4ae2ee3b",
"lane": "mariadb"
},
"provider": "actual pinned Docker MariaDB12.2.2; native hosted API/Chromium/independent SQL"
},
"historicalDiagnostics": {
"path": ".artifacts/mariadb/browser-historical.json",
"sha256": "ec9e78902125ea1edce586903cd2ea18ba0c85f0f6d85547f5d40ff96ca282fb",
"bytes": 1299337,
"stats": {
"startTime": "2026-10-23T19:06:02.726Z",
"duration": 517487.17799999996,
"expected": 18,
"skipped": 0,
"unexpected": 0,
"flaky": 0
},
"productionQualification": false,
"provider": "explicit transitional SQLite; never MariaDB qualification"
},
"historicalVolume": {
"path": ".artifacts/mariadb/browser-volume.json",
"sha256": "9511e090a792bc1c35043ebac6bee29d59d01511f37e10f08763560e9ead2bbb",
"bytes": 8513,
"stats": {
"startTime": "2026-10-23T19:14:43.927Z",
"duration": 71938.38900000001,
"expected": 3,
"skipped": 0,
"unexpected": 0,
"flaky": 0
},
"productionQualification": false,
"provider": "explicit transitional SQLite; never MariaDB qualification"
},
"guardTests": [
{
"path": ".artifacts/mariadb/runner-guards-final.log",
"sha256": "f0b946ced5ae5487e5849e289f84c3390686622aa746b4b55ce588b9f0d94868",
"bytes": 378,
"command": [
"python",
"scripts/test-mariadb-integration.py"
],
"exitCode": 0,
"passed": 5,
"realDatabaseEvidence": false
},
{
"path": ".artifacts/mariadb/browser-guards-final.log",
"sha256": "f3587abaf0d417b4b703416972bec2f3229e2e857c5d84fdf9ff275c7bac8c9c",
"bytes": 1731,
"command": [
"node",
"--test",
"job-tracker-ui/scripts/mariadb-browser-connection.test.mjs"
],
"exitCode": 0,
"passed": 10,
"realDatabaseEvidence": false
}
],
"static": {
"frontendTypecheck": {
"exitCode": 0,
"evidence": {
"path": ".artifacts/mariadb/typecheck.log",
"sha256": "f00c5da05f15ad139b5ce9c171cd10193f95e04a1348638144810e4e4f6cd497",
"bytes": 150
}
},
"frontendLint": {
"exitCode": 0,
"finalRerun": "after ESM browser guard conversion; exec session85067"
},
"targetedBrowserTypeScript": {
"exitCode": 0,
"command": "node node_modules/typescript/bin/tsc --noEmit --skipLibCheck --esModuleInterop --moduleResolution bundler --module esnext --target es2022 --allowJs playwright.mariadb.config.ts mariadb-tests/save-recovery.spec.ts"
}
},
"localDevelopment": {
"serverVersion": "12.2.2-MariaDB-ubu2404",
"migrations": 51,
"apiHealth": "{\"status\":\"ok\",\"version\":\"1.0.0.0\"}",
"sqlAfterDatabaseStopStart": "VERSION()\n12.2.2-MariaDB-ubu2404\nmigrations\n51\nId\tName\tOwnerUserId\n1\tRD21 persistent development probe\trd21-dev-persistence-probe\n",
"volume": "jobtracker-local_mariadb_dev",
"preexistingVolume": false,
"volumePreserved": true,
"productionTouched": false
}
},
"earlierFailures": [
{
"stage": "first actual MariaDB run",
"passed": 13,
"failed": 17,
"cause": "14 missing-Identity-column failures plus3 harness mistakes; not a passing qualification"
},
{
"stage": "schema census RED",
"missingColumns": [
"AspNetUsers.FirstName",
"AspNetUsers.LastName",
"AspNetUsers.DisplayName"
],
"fix": "guarded additive startup reconciliation; historical migrations untouched"
},
{
"stage": "held writer RED",
"dirtyTrackedEntries": 4,
"cause": "Pomelo1205 wrapped outside DbUpdateException catch",
"fix": "shared update cleanup catches wrapper and rethrows; no silent retry"
},
{
"stage": "Linux import history RED",
"failed": 1,
"cause": "DTO-projection ordering untranslatable",
"fix": "tenant-filtered entity ordering/limit before DTO projection"
},
{
"stage": "browser with stale Release binary",
"failed": 1,
"cause": "Debug-only fix build left old Release query",
"fix": "Release rebuild1123pass and final guarded Docker browser1pass"
},
{
"stage": "missing/unavailable/wrong-version guard probes",
"expectedFailure": true,
"qualificationPassed": false
}
],
"supplementaryOverlappingResults": {
"nativeWindowsMariaDb": {
"passed": 31,
"artifact": "mariadb.trx"
},
"officialLinuxFilesystemWsl": {
"passed": 32,
"artifact": "mariadb-linux-32.trx"
},
"earlierCompose": {
"passed": 32,
"artifact": "compose-integration/mariadb.trx"
}
},
"review": {
"independent": true,
"importantFindingsResolved": [
"canonical browser connection prevents duplicate/alias effective-target bypass",
"both browser servers refuse reuse",
"actual SELECT VERSION checked and attached",
"test service uses bridge to avoid per-project network leak"
],
"remainingActionableFindings": 0
},
"cleanup": {
"finalComposeContainerRemoved": true,
"finalComposeProjectHasNoGeneratedNetwork": true,
"earlierOwnedEmptyNetworkRemoved": true,
"browserTestContainerRemoved": true,
"developmentVolumePreserved": true
},
"verdicts": {
"mariaDb1222Rd21": "PASS_BOUNDED_RESOLUTION",
"localDevelopment": "READY",
"ciIntegration": "LOCAL_READY_HOSTED_BLOCKED_MISSING_DOCKER_CLI",
"historicalFixtures": "PASS",
"sqliteRetirement": "PLAN_READY_REMOVAL_NO_GO",
"mariaDb123Lts": "INVESTIGATION_READY_MIGRATION_NO_GO",
"phase9Reacceptance": "NO_GO",
"phase10": "NO_GO",
"production": "NO_GO"
},
"preservation": {
"groups": 57,
"routes": 33,
"partial": 56,
"deferred": "C11",
"historicalAcceptanceReportsRewritten": false,
"userDataDeleted": false,
"historicalMigrationsChanged": false
},
"notQualified": [
"hosted Gitea execution",
"complete application MariaDB coverage",
"production image/config/environment equality",
"production deployment",
"12.3 upgrade/restore/rollback",
"SQLite user-data transfer",
"manual/device/provider/output wider Phase9 acceptance",
"power-loss/storage durability"
],
"sourceSha256AtImplementationCheckpoint": {
".env.example": "46259cf55ea73ddb5726e95f98480c5131e8a00519dba9cb1a6d196b1c2eac71",
".gitea/workflows/mariadb-integration.yml": "621f15d36edc6ea9260fb2586b24b53993ba6202fdcd731bf4babbbc3ab4b8d7",
"JobTrackerApi.MariaDb.Tests/JobTrackerApi.MariaDb.Tests.csproj": "2df22a5b79fae14566b437081932218254eb811c8dc1b2af3d51692d8e0d6825",
"JobTrackerApi.MariaDb.Tests/MariaDbDatabase.cs": "1375d97093f686f77d511ef6d81ad2d62ecf329aa6e7bf53036cd6e199035e40",
"JobTrackerApi.MariaDb.Tests/README.md": "75c687f453662d313a34b5d3c7bb3c957a18afb15a7014569b853d28d69b55f9",
"JobTrackerApi.MariaDb.Tests/Rd21CareerPersistenceTests.cs": "d8fe34ce82a7f111fb75673ff14d44df0b0de778a3e42b050cfbbd9f3c274331",
"JobTrackerApi.MariaDb.Tests/Rd21JobPersistenceTests.cs": "fa70202b58933f293ec6b9655a8a717506cd75ce5824703fa14e532a288267a8",
"JobTrackerApi.MariaDb.Tests/StartupAndLockTests.cs": "f36b0cbf43ac68738997249c6ec6f1963c27a3c350e3ebba9476f27ef7ed9f81",
"JobTrackerApi.MariaDb.Tests/TestHostFactory.cs": "f9f04e0aa7bad06863910564059605a13950540a5b6e04633f7ba7340719fdab",
"JobTrackerApi.MariaDb.Tests/packages.lock.json": "bfc1e47f3c80a061c1002a79db18fa46e1f996665d501a9126c479ae0713e74d",
"JobTrackerApi.Tests/DatabaseConfigurationTests.cs": "597e83474c1067b90647325a73eccd2fe479c4d5eabf3846b3af92ed92ac2d8b",
"JobTrackerApi/Controllers/JobApplicationsController.cs": "03cef66c86a2cb2df86764301e49a747df304abc82109d41467a5038fe01c335",
"JobTrackerApi/Controllers/ProfileCvController.cs": "8afae7680bc699ca525bb2c48cc8fba71922faed68abe21feb6046c3a8e70bda",
"JobTrackerApi/Data/DatabaseConfiguration.cs": "d07e323238b2d3f6a33dc688243a2d3143ffef8e797a412d48d1175587eaf7f5",
"JobTrackerApi/Program.cs": "1956baf3c208185e89cee46a4f9ae340b79d75fb6cb823cec982570dbcdbd201",
"JobTrackerApi/Services/DatabaseBackupRunner.cs": "aa9132378123b712c42c6f56c8fb001f5b86bb6fa2bd3dfce22ef73e06dba42f",
"JobTrackerApi/Services/StartupInitializationExtensions.cs": "4d60f14dc5069e27309f662c32dd15504dbe797dee9d46cb69460f818c0544c6",
"JobTrackerApi/appsettings.Development.json": "6a3efdb176f933bbdf9aa623d617e74e84e2b61cecd20fdef6ef77351554c3f2",
"docker-compose.database.yml": "bc4f0d19ef913f9e0f92540ed9a817e7bbf00d2f00ae80ed5b1acd43d55ba363",
"docker-compose.yml": "97aecfd456f5ad8de8597d1e301a63e1a5be5f3e181032d54c12175df1acfd1c",
"docs/redesign/phase-9/p9-05/diagnostics/data.spec.ts": "b33a99c3b280f7cac8ed4294e0a4a0a297f4761708e5414e3bf768f8146a7780",
"docs/redesign/phase-9/p9-05/diagnostics/sustained.spec.ts": "76db0ac115e4745b67186b116421e2d7c374bd2e8f87a2fd40f04215e7b463c2",
"docs/redesign/phase-9/p9-05/volume/volume.spec.ts": "9a3abd9f4a8fe558e643bf481dc9a0d1857975e9d532fda6c95e27cf437f7908",
"job-tracker-ui/mariadb-tests/save-recovery.spec.ts": "3dc4f32270325fe73db1855d62a7061629834ff6f03f22a8cbb0dad25395f4a8",
"job-tracker-ui/playwright.config.ts": "bbfb6e503d39397bf0b8445a00683197e228852af2579420807463add5c8a646",
"job-tracker-ui/playwright.mariadb.config.ts": "3b427d62ca39ac1e16597e9eb4fdbf6f9abd445a2ed9c3b49f2a8ca279b3e3fa",
"job-tracker-ui/scripts/mariadb-browser-connection.mjs": "2678f51649a007a25d356e6acd35cbec4eda6d89b713ea77309c4455ec0b41fc",
"job-tracker-ui/scripts/mariadb-browser-connection.test.mjs": "39218ff8f671e0f50f8df0bc486b6fbea7699e8959662ac3b4b6d2dfce13573d",
"scripts/mariadb-integration.py": "410cede3ca8794de99735a579ac626a34b6a56ee89c6ef63880d692153c7cd97",
"scripts/test-mariadb-integration.py": "39aa5618724e74b859aceaf814bf08b9ea63a54205452805caa810a302441a80"
},
"hostedCi": {
"runId": 843,
"jobId": 1733,
"commit": "e75c4a477555bbd360b83004c25c30fbfcf233d3",
"url": "https://git.cesnimda.uk/cesnimda/jobtrackingapp/actions/runs/843",
"result": "failure",
"failedStep": "Require Docker and Compose",
"error": "docker: command not found",
"exitCode": 127,
"checkoutSucceeded": true,
"sdkSetupSucceeded": true,
"offlineRunnerGuardsPassed": 5,
"mariaDbTestsExecuted": 0,
"logSha256": "47ba05d12f08eb7a16a5649f71dde18cd582176a2bed818f3e045932ec025891",
"stepApiCaveat": "Gitea marked earlier steps failure too; actual log confirms checkout SDK and five guards passed",
"requiredNextStep": "Dedicated isolated Docker/Compose-capable test runner; rerun and inspect native TRX and cleanup"
}
}