Delete lint_paths: a target lints only its own path (T6, coding map) #802

Closed
opened 2026-09-28 16:54:23 +00:00 by jared · 3 comments
Owner

Problem

After #790 to #795 a Project holds many Targets, and each Target resolves its test and code paths from itself. lint_paths is the last key that still resolves from the repo root: Project::LintTarget#configured_lint_paths joins every entry to the project root (model/project/lint_target.rb:40). The os-sdlc target carries lint_paths: [tests, lib] only because ADR-0103 (now Superseded by ADR-0224) assigned repo-root code to os-sdlc through that key. The target's own path (<root>/plugins/os-sdlc) already covers everything the target owns, including plugins/os-sdlc/tests, so the key has no remaining job. Its only production reader is the lint worklist (controller/lint_worklist.rb:27,32).

User ruling 2026-09-29 (session 175d0e16), superseding the 2026-09-28 option A: lint only the target. Delete lint_paths; add no repo-root target. Root bin/, lib/, tests/ leave pipeline lint scope; a target is added only when a ticket first works on root code.

Reproduce

n/a: design change. Run on maps/coding.yaml.

Approach

Delete the lint_paths feature end to end. Project::LintTarget dissolves into Target#lint_path(root) (returns File.join(root, path)) and ArtifactDir for whatever else it holds. Project::Lint loses paths:. parser/project/config/document.rb FLAT_KEYS loses lint_paths. The root .sdlc/project.yaml os-sdlc entry loses its lint_paths: line.

Files: model/project/lint_target.rb, model/project/target.rb, model/project/lint.rb, controller/lint_worklist.rb, parser/project/config/document.rb, the root .sdlc/project.yaml, and the tests that pin lint paths (grep -rln "lint_path" plugins/os-sdlc/tests).
ADRs: run /os-adr:find on the files above before the first edit. Record an ADR only if an Accepted ADR still assigns root code to a target through lint_paths.

Required work:

  1. Project::LintTarget is deleted; Target#lint_path(root) returns the target directory only. — check: ! grep -rn LintTarget plugins/os-sdlc/lib
  2. No production code reads lint_paths. — check: ! grep -rn -E "lint_paths|lint\.paths" plugins/os-sdlc/lib
  3. Root .sdlc/project.yaml has no lint_paths key. — check: ! grep -n lint_paths .sdlc/project.yaml
  4. The suite is green. — check: ruby plugins/os-sdlc/tests/all.rb

Rejected: a repo-root target with path: . (needs sibling-path exclusion in Target#include? and a second cop set for code the pipeline never works on). Rejected: ../.. entries in os-sdlc lint_paths.

Acceptance criteria

  1. Given the os-sdlc target, when its lint worklist is built, then it lists files under plugins/os-sdlc (including plugins/os-sdlc/tests) and no file under the repo-root lib/ or tests/.
  2. Given a .sdlc/project.yaml whose target still has a lint_paths key, when the project loads, then it loads the same as without the key or fails loudly naming the key; it never lints the listed paths.
  3. Given the full suite, when it runs, then it passes.

Owner sketch

class OsSdlc::Project::Target
  def lint_path(root) = File.join(root, path)
end

Blocking edges

Blocked by: #795 (closed). Independent of #796.

Origin

  • Trigger: session bb36e383 design check table item T6; re-ruled in session 175d0e16
  • Improvised this session: none
  • Chain: DESIGN: ADR-0103 additive lint_paths at repo root ← model/project/lint_target.rb joins entries to the project root
  • Root candidate: this ticket
  • Where: plugins/os-sdlc/lib/os_sdlc/model/project/lint_target.rb
  • Session: 175d0e16-79aa-402d-8a69-56c74e4d5764
  • Transcript: /home/jared/.claude/projects/-home-jared-dev-cc-os--claude-worktrees-crc-pass-os-sdlc/175d0e16-79aa-402d-8a69-56c74e4d5764.jsonl
## Problem After #790 to #795 a Project holds many Targets, and each Target resolves its test and code paths from itself. `lint_paths` is the last key that still resolves from the repo root: `Project::LintTarget#configured_lint_paths` joins every entry to the project root (`model/project/lint_target.rb:40`). The os-sdlc target carries `lint_paths: [tests, lib]` only because ADR-0103 (now Superseded by ADR-0224) assigned repo-root code to os-sdlc through that key. The target's own path (`<root>/plugins/os-sdlc`) already covers everything the target owns, including `plugins/os-sdlc/tests`, so the key has no remaining job. Its only production reader is the lint worklist (`controller/lint_worklist.rb:27,32`). User ruling 2026-09-29 (session 175d0e16), superseding the 2026-09-28 option A: lint only the target. Delete `lint_paths`; add no `repo-root` target. Root `bin/`, `lib/`, `tests/` leave pipeline lint scope; a target is added only when a ticket first works on root code. ## Reproduce n/a: design change. Run on maps/coding.yaml. ## Approach Delete the `lint_paths` feature end to end. `Project::LintTarget` dissolves into `Target#lint_path(root)` (returns `File.join(root, path)`) and `ArtifactDir` for whatever else it holds. `Project::Lint` loses `paths:`. `parser/project/config/document.rb` `FLAT_KEYS` loses `lint_paths`. The root `.sdlc/project.yaml` os-sdlc entry loses its `lint_paths:` line. Files: model/project/lint_target.rb, model/project/target.rb, model/project/lint.rb, controller/lint_worklist.rb, parser/project/config/document.rb, the root .sdlc/project.yaml, and the tests that pin lint paths (`grep -rln "lint_path" plugins/os-sdlc/tests`). ADRs: run /os-adr:find on the files above before the first edit. Record an ADR only if an Accepted ADR still assigns root code to a target through `lint_paths`. Required work: 1. `Project::LintTarget` is deleted; `Target#lint_path(root)` returns the target directory only. — check: `! grep -rn LintTarget plugins/os-sdlc/lib` 2. No production code reads `lint_paths`. — check: `! grep -rn -E "lint_paths|lint\.paths" plugins/os-sdlc/lib` 3. Root `.sdlc/project.yaml` has no `lint_paths` key. — check: `! grep -n lint_paths .sdlc/project.yaml` 4. The suite is green. — check: `ruby plugins/os-sdlc/tests/all.rb` Rejected: a `repo-root` target with `path: .` (needs sibling-path exclusion in `Target#include?` and a second cop set for code the pipeline never works on). Rejected: `../..` entries in os-sdlc `lint_paths`. ## Acceptance criteria 1. Given the os-sdlc target, when its lint worklist is built, then it lists files under `plugins/os-sdlc` (including `plugins/os-sdlc/tests`) and no file under the repo-root `lib/` or `tests/`. 2. Given a `.sdlc/project.yaml` whose target still has a `lint_paths` key, when the project loads, then it loads the same as without the key or fails loudly naming the key; it never lints the listed paths. 3. Given the full suite, when it runs, then it passes. ## Owner sketch ```ruby class OsSdlc::Project::Target def lint_path(root) = File.join(root, path) end ``` ## Blocking edges Blocked by: #795 (closed). Independent of #796. ## Origin - Trigger: session bb36e383 design check table item T6; re-ruled in session 175d0e16 - Improvised this session: none - Chain: DESIGN: ADR-0103 additive lint_paths at repo root ← model/project/lint_target.rb joins entries to the project root - Root candidate: this ticket - Where: plugins/os-sdlc/lib/os_sdlc/model/project/lint_target.rb - Session: 175d0e16-79aa-402d-8a69-56c74e4d5764 - Transcript: /home/jared/.claude/projects/-home-jared-dev-cc-os--claude-worktrees-crc-pass-os-sdlc/175d0e16-79aa-402d-8a69-56c74e4d5764.jsonl
Author
Owner

Triage 2026-09-29: still valid on main bf926443. Project::LintTarget still joins lint paths to the project root (model/project/lint_target.rb configured_lint_paths); root .sdlc/project.yaml has no repo-root target; os-sdlc still lists lint_paths [tests, lib]. Not fixed, not a duplicate. Blocker #795 is closed; ticket says independent of #796 (shipped). Body has Approach, Required work with checks, acceptance criteria and a user ruling (option A). Verdict: ready-for-agent, change type update. Note: work must first run /os-adr:find and supersede the ADR-0103 clause, amend ADR-0210 rule 6. No open ticket among #805 #806 #811 #812 #818 blocks or duplicates it.

Triage 2026-09-29: still valid on main bf926443. Project::LintTarget still joins lint paths to the project root (model/project/lint_target.rb configured_lint_paths); root .sdlc/project.yaml has no repo-root target; os-sdlc still lists lint_paths [tests, lib]. Not fixed, not a duplicate. Blocker #795 is closed; ticket says independent of #796 (shipped). Body has Approach, Required work with checks, acceptance criteria and a user ruling (option A). Verdict: ready-for-agent, change type update. Note: work must first run /os-adr:find and supersede the ADR-0103 clause, amend ADR-0210 rule 6. No open ticket among #805 #806 #811 #812 #818 blocks or duplicates it.
jared changed title from lint_paths resolve relative to the target; a repo-root target owns root-level code (T6, coding map) to Delete lint_paths: a target lints only its own path (T6, coding map) 2026-09-29 14:43:10 +00:00
Author
Owner

Work started on branch ticket-802 via /os-sdlc:implement (map poodr-ticket-implementation, target os-sdlc).

Work started on branch ticket-802 via /os-sdlc:implement (map poodr-ticket-implementation, target os-sdlc).
Author
Owner

Resolution

Done: lint_paths deleted: Target#lint_path(root) returns the target directory; Project::LintTarget gone; Project::Lint has only config; FLAT_KEYS ignores a leftover lint_paths; ArtifactDir owns lint_ledger/lint_batch/lint_residual; root .sdlc/project.yaml and setup-project SKILL.md no longer carry the key; ADR-0245 supersedes ADR-0102.

Evidence: Commits c70f7e8d and 89298735 on ticket-802 (merged via worktree finish). Implementation 77: 11 dispatches, 12 min 32 s, suite-check error on a missed test caller, hand-finished per escalation step 4. Suite 1307 runs, 0 failures, 0 errors. Required work checks R1-R3 pass.

Follow-ups: #824 tests and placement for the moved lint members (user decision A). #825 unmapped-cop offenses crash the lint worklist (pre-existing on main). #665 comment for the missed test caller.

## Resolution **Done:** lint_paths deleted: Target#lint_path(root) returns the target directory; Project::LintTarget gone; Project::Lint has only config; FLAT_KEYS ignores a leftover lint_paths; ArtifactDir owns lint_ledger/lint_batch/lint_residual; root .sdlc/project.yaml and setup-project SKILL.md no longer carry the key; ADR-0245 supersedes ADR-0102. **Evidence:** Commits c70f7e8d and 89298735 on ticket-802 (merged via worktree finish). Implementation 77: 11 dispatches, 12 min 32 s, suite-check error on a missed test caller, hand-finished per escalation step 4. Suite 1307 runs, 0 failures, 0 errors. Required work checks R1-R3 pass. **Follow-ups:** #824 tests and placement for the moved lint members (user decision A). #825 unmapped-cop offenses crash the lint worklist (pre-existing on main). #665 comment for the missed test caller.
jared closed this issue 2026-09-29 15:41:26 +00:00
jared referenced this issue from a commit 2026-09-29 16:46:31 +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#802
No description provided.