os-backlog: add its own .rubocop.yml — plugin lints under repo-root config today #339
Labels
No labels
P0
P1
P2
P3
bug
create
delete
enhancement
filed-by/agent
filed-by/user
frozen
lint-rule
needs-info
needs-triage
next
plugin/cc-architect
plugin/os
plugin/os-adr
plugin/os-aidd-lint
plugin/os-backlog
plugin/os-context
plugin/os-doc-hygiene
plugin/os-sdlc
plugin/os-vault
project/cc-os
ready-for-agent
ready-for-human
recurring
review
update
waiting
wayfinder:grilling
wayfinder:map
wayfinder:map
wayfinder:research
wayfinder:task
wayfinder:task
wontfix
worklist/deviations
worklist/lint-rule
worklist/new-implement-build
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
jared/cc-os#339
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
os-backlog has no .rubocop.yml, so bare
rubocopruns there fall through to the cc-os root config (941 offenses, 890 autocorrectable, mostly tests/ and bin/os-backlog under default cops), while /os-sdlc:fix-lints judges it under os-sdlc's tuned config + Sdlc custom cops (38 offenses as of 2026-08-10). Two rulebooks, two answers. Fix: give os-backlog its own .rubocop.yml (model it on plugins/os-sdlc/.rubocop.yml) declaring which rulebook governs it. Discovered 2026-08-10 during the #337 grilling session.Decomposition (2026-08-12)
Investigation findings (dry run: os-sdlc's
.rubocop.ymlcop selection, minus theSdlc/*custom cops — those live inplugins/os-sdlc/lib/os_sdlc/cops/and don't exist in os-backlog — applied to os-backlog's 36 target files, candidate config kept in scratchpad, not committed):DisabledByDefault: true+ an explicit allowlist:Metrics/*(MethodLength 5, PerceivedComplexity 4, AbcSize 15, ClassLength 100, ParameterLists 4),Style/ClassVars, the fullrubocop-minitestassertion-idiom family, plus 27Sdlc/*custom cops requiring os-sdlc-local cop source files.Sdlc/*custom cops do not transfer — theyrequire:file paths underplugins/os-sdlc/lib/, which don't exist in os-backlog. Only theMetrics/*,Style/ClassVars, andrubocop-minitestsections are portable as-is.TargetRubyVersion: 3.4transfers (repo-wide Ruby target; os-backlog has no reason to diverge).bin/(3 extensionless scripts, ruby-shebang),lib/backlog/(14 files +lib/backlog.rb),tests/(14 files, nottest/) — directly parallel to os-sdlc'sbin/+lib/os_sdlc/+tests/shape. RuboCop's default target-file discovery picks up extensionless shebang scripts under both configs, so no extraInclude:is needed forbin/.lib/backlog/issues.rb(1: ClassLength),tests/checkout_test.rb(7: ClassLength, ParameterLists, 5x MethodLength),tests/close_protocol_test.rb(4: ClassLength, 3x MethodLength). AllMetrics/*— no Style/ClassVars or Minitest-family hits.In scope
plugins/os-backlog/.rubocop.ymlcarrying the portable subset of os-sdlc's config:DisabledByDefault: true,TargetRubyVersion: 3.4,NewCops: disable, theMetrics/*block (same thresholds, or re-tuned if os-backlog's judgment differs — see AC3),Style/ClassVars, and therubocop-minitestplugin + its enabled cop list.Sdlc/*custom-coprequire:lines — they point at nonexistent paths in os-backlog and would breakrubocopoutright.Sdlc/*, or continue relying on/os-sdlc:fix-lints' judgment layer for structural concerns — this ticket only needs the decision recorded, not the cops built.bin/,lib/backlog/, andtests/are all still scanned by the new config (noInclude/Excluderegressions) — confirm viarubocop --list-target-filesfromplugins/os-backlog/.rubocopfromplugins/os-backlog/and record the resulting offense count/breakdown as the new baseline in this ticket or a follow-up.Out of scope
/os-sdlc:fix-lintsor a dedicated follow-up ticket — this ticket is about giving os-backlog a config that produces one consistent, intentional answer, not about reaching zero offenses. Bundling the fix-out would block the config landing on an unrelated, larger effort (12+ offenses minimum, unknown-but-likely-larger once structural cops are considered).Backlog/*equivalents ofSdlc/*). Flagged as a design question in-scope item 3 above but not built here.cc-os/.rubocop.ymlor any other plugin's config./os-sdlc:fix-lintsitself.Acceptance criteria
plugins/os-backlog/.rubocop.ymlexists, isDisabledByDefault: true, declaresTargetRubyVersion: 3.4, and does notrequire:any nonexistent file path (barerubocopfromplugins/os-backlog/must not crash on cop load).rubocop --list-target-filesfromplugins/os-backlog/still includes all ofbin/decision-sweep,bin/os-backlog,bin/wakeup-poll, everylib/backlog/*.rb, and everytests/*.rb(no accidental narrowing vs. today's 36-file scan).rubocopfromplugins/os-backlog/no longer falls through to the cc-os root config — confirmed by offense count diverging from the root-config run (941) and matching a locally-explainable number under the new config, expected in the 12–40 range absent new custom cops, not 941.Backlog/*custom cops or continues deferring structural judgment to/os-sdlc:fix-lints..rubocop.ymlbehavior changes (verified viagit difftouching only files underplugins/os-backlog/).Ordered subtasks
plugins/os-backlog/.rubocop.ymlfrom the portable subset identified above.rubocop --list-target-filesand barerubocopfromplugins/os-backlog/; confirm AC2 and record the AC3 baseline count in the PR/ticket.Work started: creating plugins/os-backlog/.rubocop.yml per the decomposition; burn-down will be captured as a follow-up issue.
Done in commit
5dd1a3e: plugins/os-backlog/.rubocop.yml — DisabledByDefault, TargetRubyVersion 3.4, Metrics/* at os-sdlc thresholds, Style/ClassVars, rubocop-minitest set; no Sdlc/* cops carried. AC checks: 36 target files (no narrowing), bare rubocop = 12 offenses in 3 files (all Metrics/), not 941. Custom-cop decision recorded in the file: defer structural judgment to /os-sdlc:fix-lints, no Backlog/ cops. Burn-down captured as #349. Left open for sign-off.Resolution
Done: Created plugins/os-backlog/.rubocop.yml with the portable subset of the os-sdlc config (no Sdlc/* cops); custom-cop decision recorded in the file (defer to /os-sdlc:fix-lints).
Evidence: Commit
5dd1a3eon main; verified against 36 target files with no narrowing; 12-offense baseline (all Metrics/*), matching the ticket's dry run.Follow-ups: Offense burn-down captured as #349.