os-sdlc: lint-worklist should scan conventional dirs (tests/ missing today) #287

Closed
opened 2026-08-06 15:39:33 +00:00 by jared · 4 comments
Owner

Context

bin/lint-worklist scans only the project's code_path plus its sibling bin/ (LintWorklistTarget#lint_path), so tests/ never enters the worklist — 75 offenses sat invisible until the 2026-08-06 fix-lints pass (commit cdf1596); bin/ had the same gap, fixed in #267.

Proposal (convention over configuration): scan the conventional directories that exist — lib/, bin/, tests/|test/|spec/ — plus an additive lint_paths: key in .sdlc/project.yaml for non-standard layouts, written by setup-project / os-status:fix. No exclude mechanism until a real need appears. Decide and record the convention (ADR if it changes the project.yaml contract).

## Context bin/lint-worklist scans only the project's code_path plus its sibling bin/ (LintWorklistTarget#lint_path), so tests/ never enters the worklist — 75 offenses sat invisible until the 2026-08-06 fix-lints pass (commit cdf1596); bin/ had the same gap, fixed in #267. Proposal (convention over configuration): scan the conventional directories that exist — lib/, bin/, tests/|test/|spec/ — plus an additive lint_paths: key in .sdlc/project.yaml for non-standard layouts, written by setup-project / os-status:fix. No exclude mechanism until a real need appears. Decide and record the convention (ADR if it changes the project.yaml contract).
Author
Owner

Decomposition (2026-08-06):
Key tension for the ADR: Project already has an unused test_path field (default "test") — reuse it for lint scanning (no schema change) or add the ticket's proposed additive lint_paths: key?

  1. HUMAN — decide and record convention (ADR, per ADR-0100 pattern): (a) which conventional dirs auto-scan (lib/, bin/, tests/|test/|spec/ — first existing or all existing), (b) test_path reuse vs new lint_paths:, (c) precedence if both, (d) confirm no exclude mechanism.
  2. AGENT (after 1) — extend LintWorklistTarget#lint_path per the ADR (mirror bin_files helper), honor lint_paths: additively if adopted; update Project ATTR_DEFAULTS etc. only if schema changed; tests mirroring existing bin_files test shapes.
  3. AGENT (after 1,2) — wire lint_paths: into setup-project SKILL.md step 2 and check os-status:fix remediation; logic stays in Ruby per plugin CLAUDE.md.
  4. AGENT (after 2,3) — run bin/lint-worklist across cc-os, confirm the formerly invisible tests/ offenses surface; add lint_paths: only for non-standard layouts.
Decomposition (2026-08-06): Key tension for the ADR: Project already has an unused test_path field (default "test") — reuse it for lint scanning (no schema change) or add the ticket's proposed additive lint_paths: key? 1. HUMAN — decide and record convention (ADR, per ADR-0100 pattern): (a) which conventional dirs auto-scan (lib/, bin/, tests/|test/|spec/ — first existing or all existing), (b) test_path reuse vs new lint_paths:, (c) precedence if both, (d) confirm no exclude mechanism. 2. AGENT (after 1) — extend LintWorklistTarget#lint_path per the ADR (mirror bin_files helper), honor lint_paths: additively if adopted; update Project ATTR_DEFAULTS etc. only if schema changed; tests mirroring existing bin_files test shapes. 3. AGENT (after 1,2) — wire lint_paths: into setup-project SKILL.md step 2 and check os-status:fix remediation; logic stays in Ruby per plugin CLAUDE.md. 4. AGENT (after 2,3) — run bin/lint-worklist across cc-os, confirm the formerly invisible tests/ offenses surface; add lint_paths: only for non-standard layouts.
Author
Owner

Work started on main (no feature branch). Decision recorded as ADR-0102 (docs/adr/0102-lint-worklist-scans-all-existing-conventional-dirs-plus-an-additive-lint-paths-key.md): scan all existing conventional dirs (lib/, bin/, tests/|test/|spec/) plus additive lint_paths: key; test_path untouched; no exclude mechanism.

Work started on main (no feature branch). Decision recorded as ADR-0102 (docs/adr/0102-lint-worklist-scans-all-existing-conventional-dirs-plus-an-additive-lint-paths-key.md): scan all existing conventional dirs (lib/, bin/, tests/|test/|spec/) plus additive lint_paths: key; test_path untouched; no exclude mechanism.
Author
Owner

Implemented on main: commit f042d6c (code) + e979bb5 (ADR-0102). LintWorklistTarget#lint_path now scans code_path, bin/, all existing tests/|test/|spec/ dirs, plus the new additive lint_paths: project.yaml key (default []); test_path untouched; no exclude mechanism. setup-project SKILL.md documents the key; os-status needed no change. Verified: 738 runs / 1994 assertions green; rubocop lib/ tests/ clean. Running bin/lint-worklist against os-sdlc immediately surfaced a previously invisible Sdlc/Structural/BinScriptLoad offense — follow-up captured as #289. No PR gate — open for human sign-off.

Implemented on main: commit f042d6c (code) + e979bb5 (ADR-0102). LintWorklistTarget#lint_path now scans code_path, bin/, all existing tests/|test/|spec/ dirs, plus the new additive lint_paths: project.yaml key (default []); test_path untouched; no exclude mechanism. setup-project SKILL.md documents the key; os-status needed no change. Verified: 738 runs / 1994 assertions green; rubocop lib/ tests/ clean. Running bin/lint-worklist against os-sdlc immediately surfaced a previously invisible Sdlc/Structural/BinScriptLoad offense — follow-up captured as #289. No PR gate — open for human sign-off.
Author
Owner

Resolution

Done: lint-worklist now scans all existing conventional test dirs (tests/ test/ spec/) plus additive lint_paths: key in .sdlc/project.yaml

Evidence: commits f042d6c + e979bb5 (ADR-0102); 738 tests green; rubocop clean over 219 files; user signed off 2026-08-06

Follow-ups: #289 (BinScriptLoad offense in trim_status_table_test.rb + multi-target lint sweep)

## Resolution **Done:** lint-worklist now scans all existing conventional test dirs (tests/ test/ spec/) plus additive lint_paths: key in .sdlc/project.yaml **Evidence:** commits f042d6c + e979bb5 (ADR-0102); 738 tests green; rubocop clean over 219 files; user signed off 2026-08-06 **Follow-ups:** #289 (BinScriptLoad offense in trim_status_table_test.rb + multi-target lint sweep)
jared closed this issue 2026-08-06 17:15:05 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
jared/cc-os#287
No description provided.