You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Part of the epic "Epic: nine gaps in the Kernel, found in review".
Why. A required check that concludes neutral is read as failed, and a fix Run is admitted. Anything that is not success or pending counts as failure. The proof of concept settled skipped, neutral and cancelled as not blocking, after half its runs were cancelled.
Done when
The Maintainer rules on each conclusion GitHub can return: passing, failing, pending or unreadable.
The ruling is data in the configuration, not a branch in the code.
A boundary test for each conclusion is written first and passes, with a mutant for the mapping.
Advice from the Solution Architect persona, not a ruling. Asked while revising the pull request "Context for the Factory's authors: lessons, standards, decisions and the checks that hold them".
neutral on a required check is not passed. That much is settled: I-27 admits a model Lens only on content that "has passed" the deterministic Lenses, and the lesson "Could not check was read as nothing to check" forbids reading silence as a pass. The proof of concept's rule, that neutral does not block, is right for a check that is not required and wrong for one that is: a required Lens that says nothing has not judged the content.
Open is which of the other three it is:
Failed, today's code: anything but success and pending is check_failed, and that admits a fix Run with nothing to fix.
Pending: waits for ever, in silence.
Unreadable: a deferral with its own reason, and a Hold at the state's staleness limit.
Recommended: unreadable. A required Lens that is neutral by design should change the required set, not the rule. Not verified: how the facts port will map skipped, cancelled, timed_out and stale onto the schema's four values.
A fresh agent given only "a neutral required check is not counted as a failure" read it as passed. That reading is the one advised against here.
Working ruling (Solution Architect, delegated). The Maintainer may overturn it in review.
Question. For each conclusion GitHub can give a required check, is it passing, failing, pending or unreadable?
Options.
Map each conclusion as data:
Passing:success only.
Failing:failure and timed_out.
Pending: the queued and in-progress states, and a check that is absent.
Unreadable:neutral, skipped, cancelled, stale, action_required, startup_failure, error, and any value the map does not know. Unreadable means the Kernel defers, and the item becomes stale at its limit (Kernel: when waiting becomes the Maintainer's to see #36).
Today's rule: everything except success and pending fails. This admits a fix Run with nothing to fix.
The proof of concept's rule: neutral, skipped and cancelled pass. A Lens that did not judge is then read as having passed (L-07).
Everything except success is pending. The item waits for ever, and nobody is told.
Ruling: 1.
I-27 admits a model Lens only on content that "has passed".
L-07, C-1 and I-13 say that what could not be checked yields a deferral, never an admission.
timed_out counts as failing because a hung test usually belongs to the content (L-39), and attempts bound it.
A required Lens that is neutral by design should leave the required set for that class or scope (§5.3), not bend this rule.
GitHub treats a skipped required check as passing. The Kernel is stricter on purpose, and L-36 already bans the path filters that cause skips.
Acceptance criteria.
The facts carry GitHub's own conclusion; the port maps nothing. config/defaults.json gains check_conclusions, which maps each conclusion to passing, failing, pending or unreadable, and schemas/config.schema.json describes it. A value missing from the map is unreadable. Counter-example: examples/invalid/config.conclusion-mapped-to-nothing.json.
These tests are written first:
test_a_neutral_required_check_defers, covering neutral, skipped, cancelled, stale and an unknown value: outcome defer, reason check_unreadable, no Run.
Three mutants: neutral read as passing, neutral read as failing, and an unmapped value read as passing.
Documents: design §3.3 checks and §4.2 item 1; L-07.
Confidence. Medium to high. I would rule otherwise only for the scope, not the map: if code scanning reports neutral on documentation-only changes, that Lens's scope should be narrowed and the map left as it is.
Activity
don-petry commentedon Oct 14, 2026
Advice from the Solution Architect persona, not a ruling. Asked while revising the pull request "Context for the Factory's authors: lessons, standards, decisions and the checks that hold them".
neutralon a required check is not passed. That much is settled: I-27 admits a model Lens only on content that "has passed" the deterministic Lenses, and the lesson "Could not check was read as nothing to check" forbids reading silence as a pass. The proof of concept's rule, that neutral does not block, is right for a check that is not required and wrong for one that is: a required Lens that says nothing has not judged the content.Open is which of the other three it is:
successandpendingischeck_failed, and that admits a fix Run with nothing to fix.Recommended: unreadable. A required Lens that is neutral by design should change the required set, not the rule. Not verified: how the facts port will map
skipped,cancelled,timed_outandstaleonto the schema's four values.A fresh agent given only "a neutral required check is not counted as a failure" read it as passed. That reading is the one advised against here.
don-petry commentedon Oct 14, 2026
#35 Kernel: what each check conclusion means
Working ruling (Solution Architect, delegated). The Maintainer may overturn it in review.
Question. For each conclusion GitHub can give a required check, is it passing, failing, pending or unreadable?
Options.
successonly.failureandtimed_out.neutral,skipped,cancelled,stale,action_required,startup_failure,error, and any value the map does not know. Unreadable means the Kernel defers, and the item becomesstaleat its limit (Kernel: when waiting becomes the Maintainer's to see #36).successand pending fails. This admits a fix Run with nothing to fix.neutral,skippedandcancelledpass. A Lens that did not judge is then read as having passed (L-07).successis pending. The item waits for ever, and nobody is told.Ruling: 1.
timed_outcounts as failing because a hung test usually belongs to the content (L-39), and attempts bound it.neutralby design should leave the required set for that class or scope (§5.3), not bend this rule.Acceptance criteria.
config/defaults.jsongainscheck_conclusions, which maps each conclusion topassing,failing,pendingorunreadable, andschemas/config.schema.jsondescribes it. A value missing from the map is unreadable. Counter-example:examples/invalid/config.conclusion-mapped-to-nothing.json.test_a_neutral_required_check_defers, coveringneutral,skipped,cancelled,staleand an unknown value: outcomedefer, reasoncheck_unreadable, no Run.test_a_timed_out_required_check_goes_back_to_the_author.neutralread as passing,neutralread as failing, and an unmapped value read as passing.checksand §4.2 item 1; L-07.Confidence. Medium to high. I would rule otherwise only for the scope, not the map: if code scanning reports
neutralon documentation-only changes, that Lens's scope should be narrowed and the map left as it is.Needs the Maintainer? No.