Repository navigation
fix(lane-claim,#12740): surfacer dead_scope_globs dans le JSON — fail-open du scope mort sémantique - #12801
Merged
Conversation
…-open du scope mort sémantique Un claim `paths:` bien formé mais qui nomme un chemin inexistant (ex. `check_code_in_markdown.py` au lieu de `detect_code_in_markdown_cells.py`, incident #12620) rendait `active_claims: {}` / `blocking_lanes: []` sans traces, le WARN "glob sans correspondance" n'allant que sur stderr (canal non consommé par le gate CI, pick_idle_grain et les scripts de lane). Ajoute un champ JSON `dead_scope_globs` lane-keyed, agrégé sur TOUS les événements de claim (open/override/close) — un typo de scope relâché reste visible à un sweep, contrairement à `empty_scope` (claims actifs seuls). Politique choisie (option b) : signaler sans re-bloquer — le faile-closed #10958 (scope entièrement mort porté epic-wide) n'est pas rouvert. Tests : 236 côté check_lane_claim + 27 côté lane_claim_required = 263 pass. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This was referenced Aug 24, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Grain: MED/tooling — lane myia-po-2023:CoursIA — prev: MED/notebook-python #12791
Closes #12740
Le défaut
Une clause
paths:syntaxiquement valide qui nomme un chemin inexistant(incident #12620 :
paths: scripts/notebook_tools/check_code_in_markdown.pyalors que le fichier réel est
detect_code_in_markdown_cells.py) produit unclaim qui ne bloque personne, et l'organe le rapporte comme sain :
malformed_markers: 0,blocking_lanes: [],active_claims: {}.Le WARN
glob sans correspondanceexiste mais va sur stderr — le seulcanal que le gate CI,
pick_idle_grainet les scripts de lane ne consommentpas. Dans le JSON, la condition n'apparaît que sous
active_claims.<lane> .empty_scope(claims actifs seuls) : dès qu'un claim à scope mort est relâché,son typo disparaît complètement du JSON.
Correctif (bullets 1 + 3 de l'issue)
dead_scope_globslane-keyed, agrégé sur TOUS les événementsde claim (open, override, close), pas seulement les actifs. Un typo de scope
relâché reste visible à un sweep — le cas exact de Le predicat d'assignation du detecteur code-in-markdown accuse la prose francaise (4 des 6 entrees de baseline) #12620. Le champ est
additif et non-bloquant : il ne change aucun verdict.
.claude/rules/lane-claim-protocol.md) : le fail-closed check_lane_claim : un [CLAIMED] scope ET horodate produit un glob qui ne matche rien — le claim ne bloque personne #10958 (un scopeentièrement mort est porté epic-wide) n'est pas rouvert — un claim cassé
n'est pas permissif, et le rouvert recréerait le false-CLEAR style [ICT] Proxys sensibilite satures sur S1 malgre le correctif ICT-15c : mean == max == k-1 sur 15/15 (graine, k) #9764.
test_run_check_dead_scope_surfaces_even_when_released: le shape lane-claim: une clause paths: nommant un chemin inexistant rend un claim qui ne bloque personne (fail-OPEN, JSON dit malformed_markers: 0) #12740— claim à scope mort relâché →
active_claims: {}/blocking_lanes: [](le look silencieux) mais
dead_scope_globsnon vide nomme le glob.test_run_check_dead_scope_aggregate_empty_for_live_scope: contrôlepositif — scope vivant →
dead_scope_globs: {}et le claim bloque toujours(un détecteur qui signalerait tout serait indistinguable d'un qui marche).
Preuve d'exécution (locale, worktree
D:/Dev/CoursIA-12740-laneclaim)Les 2 nouveaux tests (dédiés) :
Smoke-test CLI réel (
--from-json, payload #12620) — le champ apparaît biendans le JSON alors que le claim est relâché :
Périmètre
scripts/check_lane_claim.py,scripts/tests/test_check_lane_claim.py,.claude/rules/lane-claim-protocol.md(politique). Aucun changement desémantique de blocage. 3 fichiers, +103/−0.
Refs #10958 (fail-closed du scope mort) · #12656 (intersection d'override) ·
#12719 (extract_lane lane fantôme)