Files
mesh-catalog/modules/gitea/test/rule-cases.json
T
jochen ac90b35b49
mesh/merge-gate pass: builds gitea → novox; no bus step; every machine composes with the change as it did without (4 of 4 compose)
mesh/repo-check pass: its merge-check.sh passed, each part in its toolchain: merge-check.sh (go), merge-check-typescript.sh (typescript)
mesh/delivery delivered
guard.ts: cover every branch for a rule Go's regexp reads otherwise, and hold both matchers to one table (issue 539)
Review 30 found guard.ts missing branches the forge protects: Go reads \d, \w,
\pL, a class opening with ] or ^, and [[:digit:]] otherwise than JavaScript.
A rule using any of them now covers every branch, so the guard refuses more
than the forge, never less. test/rule-cases.json holds the forge's answers,
read by the Go and TypeScript tests alike.
2026-10-12 12:51:22 +02:00

286 lines
14 KiB
JSON

[
{"rule":"main","branch":"main","forge":true,"why":"a plain name covers its branch"},
{"rule":"main","branch":"mainx","forge":false},
{"rule":"main","branch":"MAIN","forge":true,"why":"a plain name covers in any case (EqualFold)"},
{"rule":"Main","branch":"main","forge":true},
{"rule":"release/*","branch":"release/1.0","forge":true,"why":"* stays within a segment"},
{"rule":"release/*","branch":"release/a/b","forge":false},
{"rule":"release/**","branch":"release/a/b","forge":true,"why":"** crosses segments"},
{"rule":"v?","branch":"v1","forge":true},
{"rule":"v?","branch":"v/","forge":false,"why":"? is not the separator"},
{"rule":"a.b","branch":"axb","forge":false,"why":". is itself"},
{"rule":"Feat/*","branch":"feat/x","forge":false,"why":"a glob is matched with case"},
{"rule":"release-[ab]","branch":"release-a","forge":true,"why":"a class"},
{"rule":"release-[ab]","branch":"release-c","forge":false},
{"rule":"release-[!ab]","branch":"release-c","forge":true,"why":"a negated class"},
{"rule":"release-[!ab]","branch":"release-a","forge":false},
{"rule":"v[0-9].x","branch":"v7.x","forge":true,"why":"a range"},
{"rule":"v[0-9].x","branch":"vA.x","forge":false},
{"rule":"{main,master}","branch":"master","forge":true,"why":"alternatives"},
{"rule":"{main,master}","branch":"mainline","forge":false},
{"rule":"rel/{a,b}/*","branch":"rel/b/1","forge":true},
{"rule":"rel/{a,b}/*","branch":"rel/c/1","forge":false},
{"rule":"a\\*","branch":"a*","forge":true,"why":"an escape"},
{"rule":"a\\*","branch":"ab","forge":false},
{"rule":"a+b","branch":"a+b","forge":true,"why":"+ is itself"},
{"rule":"a+b","branch":"aab","forge":false},
{"rule":"{open","branch":"{open","forge":true,"why":"a glob the forge cannot compile covers its own text"},
{"rule":"[open","branch":"[open","forge":true},
{"rule":"[open","branch":"o","forge":false},
{"rule":"release-\\d","branch":"release-1","forge":true,"why":"Go reads \\d as a digit"},
{"rule":"release-\\d","branch":"release-d","forge":false,"guard":true},
{"rule":"v\\w*","branch":"v2","forge":true},
{"rule":"main\\s","branch":"main","forge":false,"guard":true},
{"rule":"[]a]","branch":"a","forge":true,"why":"a class opening with ] holds ]"},
{"rule":"[]a]","branch":"]","forge":true},
{"rule":"[]a]","branch":"b","forge":false,"guard":true},
{"rule":"rel-[\\d]","branch":"rel-1","forge":true},
{"rule":"v[\\pL]","branch":"va","forge":true,"why":"\\p is a Unicode class"},
{"rule":"v\\pL","branch":"va","forge":true},
{"rule":"[[:alpha:]]","branch":"a","forge":true,"why":"a POSIX class"},
{"rule":"rel-[[:digit:]]","branch":"rel-1","forge":true},
{"rule":"rel-[[:digit:]]","branch":"rel-x","forge":false,"guard":true},
{"rule":"[^+]*","branch":"-[1","forge":true,"why":"a class opening with ^ is negated in Go"},
{"rule":"d[^](","branch":"d[^](","forge":true},
{"rule":"]?","branch":":,1},","forge":false},
{"rule":"Ab,","branch":"Ab,","forge":true},
{"rule":"\\:[}-|","branch":",{","forge":false},
{"rule":"^,*.d::","branch":"/x","forge":false},
{"rule":"","branch":"A*:","forge":false},
{"rule":"!|A{","branch":":.{]","forge":false},
{"rule":"","branch":"]éb","forge":false},
{"rule":"/{)w","branch":"/{)w","forge":true},
{"rule":"*^w]","branch":"}!.","forge":false},
{"rule":"*),^?*d","branch":"*),^?*d","forge":true},
{"rule":"A)^}!","branch":"","forge":false},
{"rule":"}^d?","branch":"1\\.","forge":false},
{"rule":"","branch":"","forge":true},
{"rule":"$?[","branch":"$?[","forge":true},
{"rule":"","branch":"","forge":true},
{"rule":"+","branch":"+","forge":true},
{"rule":"","branch":"},[","forge":false},
{"rule":"xA[d:a)","branch":"]1.!bx","forge":false},
{"rule":"^/}(","branch":"","forge":false},
{"rule":"-|x.x1?","branch":"-|x.x1?","forge":true},
{"rule":"x+)A]-A","branch":"x+)A]-A","forge":true},
{"rule":"x*a","branch":"x*a","forge":true},
{"rule":"$xb","branch":"}é","forge":false},
{"rule":"wAx?/a,","branch":"","forge":false},
{"rule":"[,","branch":"[,","forge":true},
{"rule":"}!","branch":"}!","forge":true},
{"rule":"*:|\\w","branch":"","forge":false,"guard":true},
{"rule":"","branch":"","forge":true},
{"rule":"é","branch":"é","forge":true},
{"rule":"..(","branch":"{\\{+","forge":false},
{"rule":"*|{","branch":"1.}-","forge":false},
{"rule":"!+,","branch":"}++-*","forge":false},
{"rule":"x\\({","branch":"*","forge":false},
{"rule":"","branch":"","forge":true},
{"rule":"","branch":"","forge":true},
{"rule":"?-{+-","branch":"?-{+-","forge":true},
{"rule":"/-{é|$","branch":"b!.[","forge":false},
{"rule":"a-+dxA","branch":"1AA,xA","forge":false},
{"rule":"]|(","branch":"]|(","forge":true},
{"rule":"}","branch":"{!x{d","forge":false},
{"rule":"/{*](","branch":"!]","forge":false},
{"rule":"($+{-}|","branch":"/","forge":false},
{"rule":"(-b.-1}","branch":"*A*+,1","forge":false},
{"rule":"1[d|)wa","branch":"+}[!}}","forge":false},
{"rule":"w","branch":":.","forge":false},
{"rule":"?}\\*","branch":"","forge":false},
{"rule":"?$*","branch":"?$*","forge":true},
{"rule":"","branch":"!/{béa","forge":false},
{"rule":"","branch":"A1","forge":false},
{"rule":"","branch":"","forge":true},
{"rule":"!a$1/b{","branch":"!a$1/b{","forge":true},
{"rule":":dww/|d","branch":":dww/|d","forge":true},
{"rule":"!|*}","branch":"xéxé{b","forge":false},
{"rule":"1é||","branch":"a+.","forge":false},
{"rule":"/+],","branch":"!-\\[{é","forge":false},
{"rule":"a}(","branch":"a}(","forge":true},
{"rule":"|A?.","branch":"}.","forge":false},
{"rule":"d$a^d","branch":"*{","forge":false},
{"rule":"-ba$+A","branch":"-ba$+A","forge":true},
{"rule":"-.|,?a!","branch":"-.|,?a!","forge":true},
{"rule":"A","branch":"A","forge":true},
{"rule":"w","branch":"w","forge":true},
{"rule":".!1!+a","branch":".!1!+a","forge":true},
{"rule":"+$w:}","branch":"+$w:}","forge":true},
{"rule":"","branch":"","forge":true},
{"rule":")]","branch":")]","forge":true},
{"rule":"a})^,}1","branch":"a})^,}1","forge":true},
{"rule":":[:!:","branch":":[:!:","forge":true},
{"rule":"w?w:]1!","branch":"\\.]-","forge":false},
{"rule":"*$/","branch":"*$/","forge":true},
{"rule":"é](","branch":"é](","forge":true},
{"rule":"x$a/","branch":"x$a/","forge":true},
{"rule":"*)b+[^","branch":"*)b+[^","forge":true},
{"rule":"/]/?","branch":"/]/?","forge":true},
{"rule":"{x,A","branch":"!Ab","forge":false},
{"rule":"","branch":"","forge":true},
{"rule":"-,","branch":"xé}A[.","forge":false},
{"rule":"w)Ad","branch":"w)Ad","forge":true},
{"rule":":??","branch":":??","forge":true},
{"rule":"x/xé|","branch":"x/xé|","forge":true},
{"rule":"","branch":"1!","forge":false},
{"rule":"!![é[","branch":"x","forge":false},
{"rule":"wb$","branch":"wb$","forge":true},
{"rule":")","branch":")","forge":true},
{"rule":"Aw:)(1","branch":"{b\\,","forge":false},
{"rule":"","branch":"","forge":true},
{"rule":"1*}?d","branch":"1*}?d","forge":true},
{"rule":"","branch":"","forge":true},
{"rule":"?-b.","branch":"?-b.","forge":true},
{"rule":"","branch":"","forge":true},
{"rule":"d","branch":",aé1","forge":false},
{"rule":"+","branch":"+{","forge":false},
{"rule":"]d","branch":"]}:/bA","forge":false},
{"rule":"*?+:|","branch":"!é.","forge":false},
{"rule":"}$d","branch":"}$d","forge":true},
{"rule":"/","branch":"/","forge":true},
{"rule":"a$+b)b","branch":"d}","forge":false},
{"rule":"?$[/A","branch":"","forge":false},
{"rule":"é){","branch":"é){","forge":true},
{"rule":"$(d","branch":"{é}","forge":false},
{"rule":"b(","branch":"b(","forge":true},
{"rule":"^^+]","branch":"^^+]","forge":true},
{"rule":",)","branch":",)","forge":true},
{"rule":"d-.A-","branch":"d-.A-","forge":true},
{"rule":"$","branch":"\\/","forge":false},
{"rule":"}+[\\|\\$","branch":"x[!b","forge":false},
{"rule":"(d1aé!é","branch":"A[-","forge":false},
{"rule":"x","branch":"1","forge":false},
{"rule":"x","branch":"dx","forge":false},
{"rule":"]|)]","branch":"]|)]","forge":true},
{"rule":"","branch":"","forge":true},
{"rule":"[.*?","branch":"[.*?","forge":true},
{"rule":"[?","branch":"[?","forge":true},
{"rule":"","branch":"","forge":true},
{"rule":"),/","branch":"a1,,1","forge":false},
{"rule":"}+","branch":"}+","forge":true},
{"rule":"$d\\,d","branch":"$d\\,d","forge":false},
{"rule":"d1","branch":"d1","forge":true},
{"rule":"-!^.:","branch":"-!^.:","forge":true},
{"rule":"x","branch":"+].A11","forge":false},
{"rule":"","branch":"-]","forge":false},
{"rule":"}]}.","branch":"","forge":false},
{"rule":"^{wx","branch":"]1a!","forge":false},
{"rule":"^","branch":"*]x,","forge":false},
{"rule":"(:x*x","branch":"","forge":false},
{"rule":"|[/*a/","branch":"}","forge":false},
{"rule":"","branch":"","forge":true},
{"rule":"","branch":"","forge":true},
{"rule":"1\\^","branch":"!é!x{","forge":false},
{"rule":"(.b,AA+","branch":"(.b,AA+","forge":true},
{"rule":"xx","branch":"","forge":false},
{"rule":"d)^):","branch":"/}!","forge":false},
{"rule":"|","branch":",é*]*[","forge":false},
{"rule":"d*d:*1","branch":"\\b,","forge":false},
{"rule":":]","branch":"[","forge":false},
{"rule":"([|!\\^é","branch":"([|!\\^é","forge":true},
{"rule":"$[w)x-*","branch":"","forge":false},
{"rule":")","branch":")","forge":true},
{"rule":".d^)?","branch":"x\\é","forge":false},
{"rule":"1|{w","branch":"1|{w","forge":true},
{"rule":"é$,(]$$","branch":"é$,(]$$","forge":true},
{"rule":"/","branch":"/","forge":true},
{"rule":"","branch":"","forge":true},
{"rule":"+","branch":"","forge":false},
{"rule":"]","branch":"","forge":false},
{"rule":"+:a:","branch":"+:a:","forge":true},
{"rule":"/*","branch":"d.}","forge":false},
{"rule":"|/ba1-","branch":"|/ba1-","forge":true},
{"rule":"","branch":"+","forge":false},
{"rule":"A","branch":"A","forge":true},
{"rule":",-!]","branch":",-!]","forge":true},
{"rule":"$*d!)","branch":"","forge":false},
{"rule":")é+x.d","branch":")é+x.d","forge":true},
{"rule":"éa$\\[1","branch":"1/,","forge":false},
{"rule":"}?1|]d","branch":"}?1|]d","forge":true},
{"rule":"[","branch":"[","forge":true},
{"rule":"-1.*+","branch":"-1.*+","forge":true},
{"rule":"Aw|{","branch":"Aw|{","forge":true},
{"rule":"adAAAa","branch":"A","forge":false},
{"rule":"","branch":"","forge":true},
{"rule":"d/^{:","branch":"d/^{:","forge":true},
{"rule":"é:(,^","branch":"é:(,^","forge":true},
{"rule":"","branch":"","forge":true},
{"rule":"","branch":"","forge":true},
{"rule":"!ébé({+","branch":"!ébé({+","forge":true},
{"rule":"x","branch":"x","forge":true},
{"rule":"|","branch":",:*","forge":false},
{"rule":"","branch":"","forge":true},
{"rule":"x|","branch":"x|","forge":true},
{"rule":"a","branch":"aaxéb,","forge":false},
{"rule":"/w-),1é","branch":"/w-),1é","forge":true},
{"rule":"|*)^,","branch":"|*)^,","forge":true},
{"rule":"){é.!b.","branch":"a-}:","forge":false},
{"rule":"(\\","branch":"(\\","forge":true},
{"rule":".w(\\","branch":"+","forge":false},
{"rule":"/d[","branch":"/d[","forge":true},
{"rule":"(}$x!}","branch":"a,bb","forge":false},
{"rule":"w{","branch":"w{","forge":true},
{"rule":"[+a\\A(+","branch":"[+a\\A(+","forge":true},
{"rule":"(1^{)bb","branch":"(1^{)bb","forge":true},
{"rule":"^1","branch":"é-}","forge":false},
{"rule":"*,+}1):","branch":"*,+}1):","forge":true},
{"rule":"[A[(.x,","branch":"]db!*","forge":false},
{"rule":"","branch":"Ad}","forge":false},
{"rule":".","branch":".","forge":true},
{"rule":"w!é{x","branch":"é.{","forge":false},
{"rule":"$\\^","branch":"bx]+","forge":false},
{"rule":"1)","branch":"+*d","forge":false},
{"rule":"x)}/])","branch":"]","forge":false},
{"rule":",a}.1}","branch":",a}.1}","forge":true},
{"rule":"-a{(","branch":"-a{(","forge":true},
{"rule":"1","branch":"1","forge":true},
{"rule":"","branch":"","forge":true},
{"rule":"}[é$","branch":"]d-!","forge":false},
{"rule":"xé{é+?","branch":"xé{é+?","forge":true},
{"rule":"/A1!","branch":"xAA\\::","forge":false},
{"rule":"1][b-.(","branch":"{/-b![","forge":false},
{"rule":"(d}(","branch":"(d}(","forge":true},
{"rule":"{*}","branch":"!ébd","forge":true},
{"rule":"()^^)","branch":"()^^)","forge":true},
{"rule":"1(1A{$","branch":"*,[","forge":false},
{"rule":"A:!^\\","branch":"A:!^\\","forge":true},
{"rule":"-]:b]","branch":"-]:b]","forge":true},
{"rule":",","branch":",","forge":true},
{"rule":"[-:]","branch":"[-:]","forge":false},
{"rule":"","branch":"é:b1:d","forge":false},
{"rule":"1\\!]?d","branch":"","forge":false},
{"rule":"","branch":"bb!]+","forge":false},
{"rule":"/da","branch":"b]d[","forge":false},
{"rule":",]","branch":",]","forge":true},
{"rule":"[","branch":"[","forge":true},
{"rule":"a]{A-","branch":"-+","forge":false},
{"rule":"A?A^1","branch":"A?A^1","forge":true},
{"rule":"\\-$","branch":"","forge":false},
{"rule":"+","branch":"*[}[","forge":false},
{"rule":",b?{dw","branch":",b?{dw","forge":true},
{"rule":"d[$b1","branch":"/","forge":false},
{"rule":"})|xAA","branch":"é,!","forge":false},
{"rule":"]--","branch":"]--","forge":true},
{"rule":"],/b","branch":"],/b","forge":true},
{"rule":"/","branch":"/","forge":true},
{"rule":"*aé","branch":"*aé","forge":true},
{"rule":"{","branch":"{","forge":true},
{"rule":":aé","branch":"","forge":false},
{"rule":".\\}","branch":".\\}","forge":false},
{"rule":"wA]*","branch":"\\]!d{+","forge":false},
{"rule":"a/1x$/","branch":"[1!:/A","forge":false},
{"rule":"[.wb}d.","branch":"-!*..a","forge":false},
{"rule":".[{()a","branch":"+}","forge":false},
{"rule":"]/!:,","branch":"{Aéa","forge":false},
{"rule":"é{ba[-","branch":"],,1d/","forge":false},
{"rule":"(w*","branch":"1}.!","forge":false},
{"rule":"{?","branch":"1","forge":false},
{"rule":")","branch":",+!","forge":false},
{"rule":":","branch":"{/+A][","forge":false},
{"rule":".1{)","branch":"a\\bA","forge":false},
{"rule":"w-1+x1-","branch":"*]1}bb","forge":false},
{"rule":"xb$$","branch":"éx:]-:","forge":false},
{"rule":"++$!?*$","branch":"bA","forge":false},
{"rule":"]{","branch":"[xd*x.","forge":false}
]