feat: classify the status of an execution that did not pass - #8312
Conversation
✅ Testkube GitHub IntegrationReview based on commit All tests and quality gates passed.
7 workflows executed
|
|
f38c0e9 to
94a8674
Compare
94a8674 to
060dede
Compare
060dede to
8580c4b
Compare
|
@greptileai review |
8580c4b to
32a9f47
Compare
|
@greptileai review |
32a9f47 to
2d42230
Compare
|
@greptileai review |
859f538 to
8466631
Compare
|
@greptileai review |
| // A group takes its status from its children, so only a leaf names a failure of the test. | ||
| if len(sig.Children) > 0 { | ||
| continue | ||
| } |
There was a problem hiding this comment.
Negative-group failures become unknown
Critical (must fix before merge): A required negative: true group containing two successful shell steps fails because its result is !step1 || !step2, while both leaves pass. Skipping every group here discards the only failed step, so normal completion is classified as unknown with no step instead of step-failure / exit-code naming the group.
This also makes execution().statusType, statusReason, and statusStep lose the actual test-failure classification. Prefer failed leaves when available, but retain a failed required group as a fallback.
8466631 to
be324e7
Compare
0533a92 to
e54fb7c
Compare
e54fb7c to
ce98764
Compare
ce98764 to
c4d303c
Compare
Every execution that does not pass now carries the status details object when the runner or the standalone agent ends it. One function in the model package builds the object from the final result and from what the caller knows about the stop. It reads a cancel by a person first, then a cause that a step recorded, then the reason of the stop, then a step of the test that failed, then a job that a caller removed without naming itself. A cause that a step recorded wins over the reason of the stop, because the cause is what the user fixes and the stop is only the mechanism that ended the execution. The runner classifies at the end of a watch, after a lost watch, and after the check for stuck executions. The standalone agent classifies when it declines an execution, and it now stores the message and the code that it dropped before.
A program cannot act on a sentence. The layer and the code give the dashboard a label, the list a filter, and a webhook a value to route on, and they stay the same when the wording changes. A workflow reads the layer, the code, and the step of another execution through the
execution()function, so a suite asserts the cause of a failure and not the words of a message. The message and the person who canceled stay out of that record, because a child workflow must not read them.