Move lint lessons to their own Lesson concept (ADR-0265) #908
Labels
No labels
P0
P1
P2
P3
bug
category/code-change
category/cross-repo
category/eval-run
category/investigation
category/no-test-target
category/owner-ruling
category/prose-artifact
category/recurring-chore
category/structure
category/umbrella
crc-refactor
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
rule-proposal
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#908
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?
Problem
ADR-0265 makes lint lessons their own concept.
The lesson code still lives under
Gate.OsSdlc::Gateclasses own the lesson selection, ordering and rendering today.Approach
Pure rename.
Relaykeeps selection, ordering and rendering together.Required work:
presenter/gate/lesson_relay.rbtopresenter/lesson/relay.rbasOsSdlc::Lesson::Relay— check: presentLesson::Relayinplugins/os-sdlc/lib/os_sdlc/presenter/lesson/relay.rbadapter/gate/lesson_library.rbtoadapter/lesson/library.rbasOsSdlc::Lesson::Library— check: presentLesson::Libraryinplugins/os-sdlc/lib/os_sdlc/adapter/lesson/library.rbtests/presenter/lesson/relay_test.rbandtests/adapter/lesson/library_test.rb— check: presentLesson::Relayinplugins/os-sdlc/tests/presenter/lesson/relay_test.rbcommand/gate/run.rb:100-103to buildLesson::Librarywith the plugin lesson directory — check: absentGate::LessonRelayinplugins/os-sdlc/lib/os_sdlc/command/gate/run.rbArtifactDir#lint_lessons— check: absentlint_lessonsinplugins/os-sdlc/lib/os_sdlc/model/project/artifact_dir.rblint_lessonsuse from the gate run — check: absentlint_lessonsinplugins/os-sdlc/lib/os_sdlc/command/gate/run.rblint_lessonstest — check: absentlint_lessonsinplugins/os-sdlc/tests/model/project/artifact_dir_test.rbskills/mine-lints/references/implement-cop.mdwith the ADR-0265 section list: The signal; What it is a sign of; Why it matters; Your decision; Correction; Example — check: presentWhat it is a sign ofinplugins/os-sdlc/skills/mine-lints/references/implement-cop.mdLesson text uses generic names (for example
orders_dataset,Order), never names from this codebase.Lessons ship with the plugin (ADR-0266, amends ADR-0265):
Lesson::Libraryreads fromplugins/os-sdlc/lint-lessons/<kebab-cop-name>.md, found throughPluginRoot::PATH.The gate no longer reads the project's
.sdlc/lint-lessons/.Remove
ArtifactDir#lint_lessons(model/project/artifact_dir.rb), its use incommand/gate/run.rb, and its test intests/model/project/artifact_dir_test.rb.command/gate/run.rbbuilds the library with the plugin path.Ruling (user, 2026-10-02): lint lessons are global and not project specific; project-specific lessons are deferred (YAGNI). Recorded in ADR-0266, which amends ADR-0265.
Order: this ticket comes before the three cop tickets (#909, #910, #911); they depend on it.
Acceptance criteria
Gate::LessonRelayandGate::LessonLibraryare searched, then no reference remains..sdlc/lint-lessons/directory and a cop offense that has a plugin lesson file, when the gate replies, then the lesson renders.Owner sketch
Origin
16092949) decided that lint lessons are a concept.Work started on branch ticket-908 through the os-sdlc pipeline.
Resolution
Done: Gate::LessonRelay and Gate::LessonLibrary moved to the Lesson concept (OsSdlc::Lesson::Relay, OsSdlc::Lesson::Library). Gate::Run builds the library with the plugin lesson directory. ArtifactDir#lint_lessons removed. implement-cop.md gained the lesson step (ADR-0265, ADR-0266).
Evidence: Branch ticket-908, commits
127395d1and52cd78a5; os-sdlc implementation 11: 10 dispatches, suite gate and required-work gate green, contract-auditor pass.Follow-ups: Lens proposal on heuristic A2 (empty namespace root) from the contract-auditor: captured as a separate ready-for-human issue after its challenge. Lesson files themselves arrive with #909, #910, #911. History row for the os-sdlc leaf added after merge.
Lens challenge (implementation 11 contract-auditor LENS line, A2 root-less Lesson namespace at presenter/lesson/relay.rb:4): verdict heuristic holds. ADR-0246 Decision 1 (docs/adr/0246-*.md:25) permits root-less noun namespaces (Evidence has no root file), and ADR-0265 Decision 2 names the root-less Lesson::Relay / Lesson::Library layout. No code change and no lens edit. The proposed A2 NOT clause gives no test that separates Lesson from the lens-cases Case 1 Git defect, so protocol step 6 refuses it. Open point: A2 (1) does not cross-reference the ADR-0246 root-less noun namespace rule. Capture skeptic gate: VERDICT: DROP (need-to-exist), so no Lens proposal ticket was filed.