Close the message and lesson gaps that two real concept-loop corrections showed #1764

Closed
opened 2026-11-13 22:07:23 +00:00 by jared · 2 comments
Owner

Problem

Two real corrections were made from the concept-loop cop package on 2026-11-13, each by one agent that got only the offense and the lesson. Both corrections were correct. Each agent reported facts that the message or the lesson did not give, and that it had to find in the code.

Observed

Sdlc/Structural/ClassInWrongConcept at lib/os_sdlc/dispatch/async_launch.rb:5 (correction 4e047e76a):

  1. The message says "The move removes 2 loop reports". The total went from 93 to 91, but two lines changed cop: ConceptCallsItsCaller went from 11 to 13 offenses. The message does not say this.
  2. The lesson says "run the generator" and does not name it. The command is bin/system-model build --target os-sdlc.
  3. The lesson does not say how to tell a record of past work from a present document.
  4. The lesson step "Test file of the class: move it" does not cover a class with no test file.
  5. The message does not say that the top-level constants the class uses still resolve after the move.

Sdlc/Structural/ConceptCallsItsCaller at lib/os_sdlc/project/config_command.rb:29 (correction d6a345222):

  1. The message lists users of the entry constant. One user (Hook) calls a method (connect) that is at none of the listed lines.
  2. The lesson calls a helper "a helper method that only that code calls". It does not say that a helper moves when each of its callers moves.
  3. Lesson step 5 says "keep it and let it call the owner". It does not say if a private call inside the constant counts, or if the agent can inline it.
  4. The message counts loop reports (references). The cops count offenses. StartingCodeInSharedConcept gives 19 offenses for 18 references, so the agent could not compare the stated effect with the cop counts.
  5. Neither text says what to do with a test that builds the entry constant for a changed user.
  6. The lesson gives no guidance on the name of the owner.

Reproduce

n/a: the two corrections are merged; the offenses no longer exist.

Approach

Correct the message forms and the two lessons for the items above. Each new value in a message comes from OsSdlc::Lint::ConceptCycleCheck::Kinds::Report. Lesson text holds no repository names.

Origin

  • Trigger: step 7 of the handoff plugins/os-sdlc/.cc-os/os/handoffs/2026-11-13-1547-concept-cycle-package.md; the two agent runs that made commits 4e047e76a and d6a345222.
  • Improvised this session: none; each agent found the missing fact in the code.
  • Chain: agent must search for a fact ← the message or lesson does not give it ← the package was tested by dry runs only before the build (IMPROVISATION: no real correction was run before #1749 to #1752 closed).
  • Root candidate: none found; searched concept-loop, ClassInWrongConcept, ConceptCallsItsCaller, lesson, message, ConceptCycleCheck
  • Where: plugins/os-sdlc/lib/os_sdlc/cops/structural/class_in_wrong_concept/move.rb, plugins/os-sdlc/lib/os_sdlc/cops/structural/concept_calls_its_caller/, plugins/os-sdlc/lint-lessons/sdlc-structural-class-in-wrong-concept.yml, plugins/os-sdlc/lint-lessons/sdlc-structural-concept-calls-its-caller.yml
  • Session: fdf2ac7d-9590-47d4-97e8-ebff9711ce46
  • Transcript: /home/jared/.claude/projects/-home-jared-dev-cc-os-plugins-os-sdlc/fdf2ac7d-9590-47d4-97e8-ebff9711ce46.jsonl

VERDICT: CREATE

## Problem Two real corrections were made from the concept-loop cop package on 2026-11-13, each by one agent that got only the offense and the lesson. Both corrections were correct. Each agent reported facts that the message or the lesson did not give, and that it had to find in the code. ## Observed `Sdlc/Structural/ClassInWrongConcept` at `lib/os_sdlc/dispatch/async_launch.rb:5` (correction `4e047e76a`): 1. The message says "The move removes 2 loop reports". The total went from 93 to 91, but two lines changed cop: `ConceptCallsItsCaller` went from 11 to 13 offenses. The message does not say this. 2. The lesson says "run the generator" and does not name it. The command is `bin/system-model build --target os-sdlc`. 3. The lesson does not say how to tell a record of past work from a present document. 4. The lesson step "Test file of the class: move it" does not cover a class with no test file. 5. The message does not say that the top-level constants the class uses still resolve after the move. `Sdlc/Structural/ConceptCallsItsCaller` at `lib/os_sdlc/project/config_command.rb:29` (correction `d6a345222`): 6. The message lists users of the entry constant. One user (`Hook`) calls a method (`connect`) that is at none of the listed lines. 7. The lesson calls a helper "a helper method that only that code calls". It does not say that a helper moves when each of its callers moves. 8. Lesson step 5 says "keep it and let it call the owner". It does not say if a private call inside the constant counts, or if the agent can inline it. 9. The message counts loop reports (references). The cops count offenses. `StartingCodeInSharedConcept` gives 19 offenses for 18 references, so the agent could not compare the stated effect with the cop counts. 10. Neither text says what to do with a test that builds the entry constant for a changed user. 11. The lesson gives no guidance on the name of the owner. ## Reproduce n/a: the two corrections are merged; the offenses no longer exist. ## Approach Correct the message forms and the two lessons for the items above. Each new value in a message comes from `OsSdlc::Lint::ConceptCycleCheck::Kinds::Report`. Lesson text holds no repository names. ## Origin - Trigger: step 7 of the handoff `plugins/os-sdlc/.cc-os/os/handoffs/2026-11-13-1547-concept-cycle-package.md`; the two agent runs that made commits `4e047e76a` and `d6a345222`. - Improvised this session: none; each agent found the missing fact in the code. - Chain: agent must search for a fact ← the message or lesson does not give it ← the package was tested by dry runs only before the build (IMPROVISATION: no real correction was run before #1749 to #1752 closed). - Root candidate: none found; searched concept-loop, ClassInWrongConcept, ConceptCallsItsCaller, lesson, message, ConceptCycleCheck - Where: `plugins/os-sdlc/lib/os_sdlc/cops/structural/class_in_wrong_concept/move.rb`, `plugins/os-sdlc/lib/os_sdlc/cops/structural/concept_calls_its_caller/`, `plugins/os-sdlc/lint-lessons/sdlc-structural-class-in-wrong-concept.yml`, `plugins/os-sdlc/lint-lessons/sdlc-structural-concept-calls-its-caller.yml` - Session: fdf2ac7d-9590-47d4-97e8-ebff9711ce46 - Transcript: /home/jared/.claude/projects/-home-jared-dev-cc-os-plugins-os-sdlc/fdf2ac7d-9590-47d4-97e8-ebff9711ce46.jsonl VERDICT: CREATE
Author
Owner

Gaps from the PipelineScript move (commit 69d3dba65, one agent run from the offense and lesson only; StartingCodeInSharedConcept 19 to 0, loop reports 62 to 42):
12. The lesson says 'move the test file' but not to fix its relative require_relative path; the suite failed to load until the agent changed it.
13. The message's list of test files is incomplete: test/support files that hold the old name as strings are not listed. One listed test file was a false hit (only a method name matched).
14. 'References that stay' lists the superclass line and says each name must start with the old concept; for a superclass that IS the old concept, nothing changes. The rule is unclear for that line.
15. The lesson tells the agent to update present documents but does not say a document can be outside the plugin directory (docs/architecture/ at the repository root).
16. The lesson says 'run the generator' (see item 2); state when not to (generated files already stale) or how to keep the regeneration diff scoped.
17. The message does not say that decision records, History rows, and research records keep the old name; only the lesson says it.
18. The project test command comes from .sdlc/project.yaml (ruby test/all.rb); there is no Rakefile. A lesson that names a test command must read it from there.

Gaps from the PipelineScript move (commit 69d3dba65, one agent run from the offense and lesson only; StartingCodeInSharedConcept 19 to 0, loop reports 62 to 42): 12. The lesson says 'move the test file' but not to fix its relative require_relative path; the suite failed to load until the agent changed it. 13. The message's list of test files is incomplete: test/support files that hold the old name as strings are not listed. One listed test file was a false hit (only a method name matched). 14. 'References that stay' lists the superclass line and says each name must start with the old concept; for a superclass that IS the old concept, nothing changes. The rule is unclear for that line. 15. The lesson tells the agent to update present documents but does not say a document can be outside the plugin directory (docs/architecture/ at the repository root). 16. The lesson says 'run the generator' (see item 2); state when not to (generated files already stale) or how to keep the regeneration diff scoped. 17. The message does not say that decision records, History rows, and research records keep the old name; only the lesson says it. 18. The project test command comes from .sdlc/project.yaml (ruby test/all.rb); there is no Rakefile. A lesson that names a test command must read it from there.
Author
Owner

Resolution

Done: Items 1-18: lesson text for 2,3,4,7,8,10,11,12,15,16,18; message code for 1,5,6,9,13,14,17 (new values from Kinds::Report).

Evidence: b9fbc7c0d merged to main; suite 5568 runs 0 failures; sweep counts on lib unchanged 33/0/0/9

Follow-ups: dropped: per-cop offense count after a move (item 1) and the exact method each user calls (item 6) need large new computations; the messages now state the total and tell the agent to read the method; re-file if a real correction misses either

## Resolution **Done:** Items 1-18: lesson text for 2,3,4,7,8,10,11,12,15,16,18; message code for 1,5,6,9,13,14,17 (new values from Kinds::Report). **Evidence:** b9fbc7c0d merged to main; suite 5568 runs 0 failures; sweep counts on lib unchanged 33/0/0/9 **Follow-ups:** dropped: per-cop offense count after a move (item 1) and the exact method each user calls (item 6) need large new computations; the messages now state the total and tell the agent to read the method; re-file if a real correction misses either <!-- os-backlog kind: resolution -->
jared closed this issue 2026-11-14 15:31:41 +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#1764
No description provided.