Lukas and GitHub
8b951d3bf6
fix(skill-comply): stop a failed step supplying evidence downstream ( #3109 )
...
* fix(skill-comply): stop a failed step supplying evidence downstream
`_check_temporal_order` fell back to the raw classifier output whenever
the referenced step was absent from `resolved`. A step only enters
`resolved` once it passes, so "failed" and "not graded yet" were the
same thing to that lookup, and a dependant could pass on an event
belonging to a prerequisite that had failed its own ordering check.
With three steps C, A (before C) and B (after A) and events C@T0,
A@T1, B@T2, A fails and B passed on A's classified event: 2/3 instead
of 1/3. It compounds down a chain, so one failed prerequisite could
leave a five-step workflow reading 4/5.
The grader now tracks which steps have been graded at all. A referenced
step that was graded and is missing from `resolved` failed, and its
events are refused with a reason that says so. A step not graded yet is
a forward reference to a step declared later, and the fallback stays as
it was: that is what makes an out-of-order declaration work, and the
existing regression for it goes red if the fallback is removed instead.
`before_step` deliberately keeps the old fallback. The two fail in
opposite directions: an `after_step` fallback can only turn a failure
into a pass, a `before_step` one can only turn a pass into a failure,
so dropping it would relax a constraint because some other step failed.
* fix(skill-comply): revoke a pass that rested on a later-failing prerequisite
Review of #3109 found the mirror image of the case that PR fixes. `graded`
only catches a prerequisite that had already failed when its dependant was
graded. A step declared *before* its `after_step` is graded against the
classifier's raw events for a step that has not run yet — the fallback that
makes an out-of-order declaration work — and nothing revisited it once that
step went on to fail its own checks.
Add a pass after grading that demotes any detected step whose `after_step`
ended up failing, repeated to a fixed point: one demotion can invalidate
whatever depended on it, in either declaration order. Demotion only removes
passes, so it terminates. `compliance_rate` is computed from the demoted
results.
Also from review: build `graded` and the chain test's step list as new
objects rather than mutating (AGENTS.md immutability rule), and annotate the
injected mocks in the tests this PR owns.
2026-09-21 14:39:20 -04:00
..
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-06-11 17:58:57 +05:30
2026-06-11 21:12:21 +09:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-06-11 21:12:21 +09:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-06-11 21:12:21 +09:00
2026-06-11 21:12:21 +09:00
2026-06-11 21:12:21 +09:00
2026-09-07 16:41:45 -04:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-07-17 17:13:49 -04:00
2026-09-10 13:20:52 +01:00
2026-07-17 17:13:49 -04:00
2026-06-11 21:12:21 +09:00
2026-06-11 21:12:21 +09:00
2026-06-15 14:21:28 -04:00
2026-06-11 21:12:21 +09:00
2026-06-15 14:09:17 -04:00
2026-06-11 21:12:21 +09:00
2026-06-11 21:12:21 +09:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-06-11 21:12:21 +09:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-06-11 21:12:21 +09:00
2026-06-11 21:12:21 +09:00
2026-08-11 23:58:14 -04:00
2026-06-11 21:58:42 +02:00
2026-06-11 21:58:42 +02:00
2026-08-11 23:58:14 -04:00
2026-06-11 21:12:21 +09:00
2026-08-06 15:39:49 -04:00
2026-06-11 21:12:21 +09:00
2026-06-11 21:12:21 +09:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-09-19 20:33:41 +08:00
2026-07-26 00:05:22 -07:00
2026-08-28 21:22:54 -04:00
2026-09-13 04:55:52 +08:00
2026-06-11 21:12:21 +09:00
2026-08-11 16:30:04 -04:00
2026-09-10 13:20:52 +01:00
2026-06-11 21:12:21 +09:00
2026-06-11 21:12:21 +09:00
2026-08-24 22:26:32 -03:00
2026-08-11 23:58:14 -04:00
2026-06-11 21:12:21 +09:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-08-24 22:26:32 -03:00
2026-07-17 17:13:49 -04:00
2026-08-11 23:58:14 -04:00
2026-08-24 22:26:32 -03:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-08-11 12:17:03 -04:00
2026-06-11 21:12:21 +09:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-06-11 21:12:21 +09:00
2026-06-11 21:12:21 +09:00
2026-08-06 16:52:39 -04:00
2026-06-11 21:12:21 +09:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-06-11 21:12:21 +09:00
2026-08-11 23:58:14 -04:00
2026-06-11 21:12:21 +09:00
2026-08-24 22:26:32 -03:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-09-10 13:20:52 +01:00
2026-09-12 04:35:38 -04:00
2026-08-11 23:58:14 -04:00
2026-08-28 16:05:23 -04:00
2026-09-10 15:31:36 +01:00
2026-08-11 23:58:14 -04:00
2026-06-11 21:12:21 +09:00
2026-06-16 02:15:43 -04:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-09-10 13:20:52 +01:00
2026-06-11 21:12:21 +09:00
2026-08-11 23:58:14 -04:00
2026-09-21 14:32:21 -04:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-09-18 18:37:01 -04:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-09-10 15:01:03 -04:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-06-11 21:12:21 +09:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-06-11 21:12:21 +09:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-06-11 21:12:21 +09:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-04-05 13:30:55 -07:00
2026-06-11 21:12:21 +09:00
2026-06-07 13:26:45 +08:00
2026-08-11 23:58:14 -04:00
2026-06-11 21:12:21 +09:00
2026-06-11 21:12:21 +09:00
2026-06-11 21:12:21 +09:00
2026-08-11 23:58:14 -04:00
2026-08-12 15:52:26 -04:00
2026-08-31 15:16:16 -04:00
2026-08-07 14:55:22 -04:00
2026-08-12 15:52:26 -04:00
2026-08-11 23:58:14 -04:00
2026-08-24 22:26:32 -03:00
2026-08-11 23:58:14 -04:00
2026-06-11 21:12:21 +09:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-06-11 21:12:21 +09:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-08-24 22:26:32 -03:00
2026-08-11 23:58:14 -04:00
2026-08-10 17:10:01 -04:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-07-17 17:13:49 -04:00
2026-06-29 18:38:19 -07:00
2026-06-11 21:12:21 +09:00
2026-06-11 21:12:21 +09:00
2026-08-24 22:26:32 -03:00
2026-08-11 23:58:14 -04:00
2026-09-10 13:20:52 +01:00
2026-08-11 23:58:14 -04:00
2026-06-11 21:12:21 +09:00
2026-08-11 23:58:14 -04:00
2026-07-17 17:13:49 -04:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-08-25 17:19:45 -04:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-06-11 21:12:21 +09:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-09-10 13:20:52 +01:00
2026-06-11 21:12:21 +09:00
2026-08-11 23:58:14 -04:00
2026-06-11 21:12:21 +09:00
2026-06-11 21:12:21 +09:00
2026-08-11 23:58:14 -04:00
2026-06-11 21:12:21 +09:00
2026-07-17 17:13:49 -04:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-09-10 13:20:52 +01:00
2026-07-03 20:00:51 -07:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-06-11 21:12:21 +09:00
2026-08-11 23:58:14 -04:00
2026-06-11 21:12:21 +09:00
2026-06-11 21:12:21 +09:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-06-11 21:12:21 +09:00
2026-08-11 19:36:48 -04:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-06-11 21:12:21 +09:00
2026-08-10 19:31:55 -04:00
2026-09-12 04:39:08 -04:00
2026-08-11 23:58:14 -04:00
2026-06-29 19:22:48 -07:00
2026-06-11 21:12:21 +09:00
2026-06-11 21:12:21 +09:00
2026-06-11 21:12:21 +09:00
2026-06-11 21:12:21 +09:00
2026-07-17 17:13:49 -04:00
2026-08-11 23:58:14 -04:00
2026-06-11 21:12:21 +09:00
2026-08-11 23:58:14 -04:00
2026-08-13 16:42:51 -04:00
2026-06-11 21:12:21 +09:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-06-11 21:12:21 +09:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-06-11 21:12:21 +09:00
2026-08-11 23:58:14 -04:00
2026-09-13 03:15:37 +08:00
2026-08-11 23:58:14 -04:00
2026-06-11 21:12:21 +09:00
2026-09-21 14:39:20 -04:00
2026-06-11 21:12:21 +09:00
2026-08-29 16:07:00 -04:00
2026-06-11 21:12:21 +09:00
2026-08-24 22:26:32 -03:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-06-11 21:12:21 +09:00
2026-06-11 21:12:21 +09:00
2026-08-24 22:26:22 -03:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-09-10 13:20:52 +01:00
2026-09-10 15:31:36 +01:00
2026-09-10 15:31:36 +01:00
2026-09-10 15:31:36 +01:00
2026-09-10 13:20:52 +01:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-08-06 17:24:34 -04:00
2026-06-11 21:12:21 +09:00
2026-06-15 14:09:17 -04:00
2026-06-11 21:12:21 +09:00
2026-06-11 21:12:21 +09:00
2026-06-11 21:12:21 +09:00
2026-06-11 21:12:21 +09:00
2026-09-12 05:52:29 -04:00
2026-06-11 21:12:21 +09:00
2026-08-11 23:58:14 -04:00
2026-09-10 15:31:36 +01:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-06-11 21:12:21 +09:00
2026-08-11 23:58:14 -04:00
2026-08-11 23:58:14 -04:00
2026-06-11 21:12:21 +09:00
2026-08-24 22:26:32 -03:00