What happens
Fbe.unmask_repos (lib/fbe/unmask_repos.rb:73) splits options.repositories by comma and uses each mask verbatim — no strip. A space after a comma, which is how humans naturally write lists, corrupts the mask:
opts = Judges::Options.new({'testing' => true, 'repositories' => 'yegor256/factbase, Yegor256/*'})
Fbe.unmask_repos(options: opts, global: {}, loog: Loog::NULL)
# => ["yegor256/factbase"]
The wildcard mask " Yegor256/*" is silently dropped: Fbe.mask_to_regex escapes the leading space into the regex (/\A\ Yegor256\/.*\z/i), which matches no real full_name, so the whole repository group quietly disappears from the scan — no error, no warning.
An exact-name mask is even worse off: 'a/b, c/d' pushes " c/d" into the list as-is, and the archived-repos filter then calls octo.repository(" c/d"), which on the real GitHub API fails — crashing the judge with a cryptic Octokit error instead of pointing at the stray space.
What should happen
Masks should be whitespace-tolerant: masks = options.repositories.split(',').map(&:strip).reject(&:empty?) (the reject also guards against a double comma, which today pushes an empty string into the repo list). A mask written as "a/b, c/*" should behave exactly like "a/b,c/*".
What happens
Fbe.unmask_repos(lib/fbe/unmask_repos.rb:73) splitsoptions.repositoriesby comma and uses each mask verbatim — nostrip. A space after a comma, which is how humans naturally write lists, corrupts the mask:The wildcard mask
" Yegor256/*"is silently dropped:Fbe.mask_to_regexescapes the leading space into the regex (/\A\ Yegor256\/.*\z/i), which matches no realfull_name, so the whole repository group quietly disappears from the scan — no error, no warning.An exact-name mask is even worse off:
'a/b, c/d'pushes" c/d"into the list as-is, and the archived-repos filter then callsocto.repository(" c/d"), which on the real GitHub API fails — crashing the judge with a cryptic Octokit error instead of pointing at the stray space.What should happen
Masks should be whitespace-tolerant:
masks = options.repositories.split(',').map(&:strip).reject(&:empty?)(therejectalso guards against a double comma, which today pushes an empty string into the repo list). A mask written as"a/b, c/*"should behave exactly like"a/b,c/*".