fast-batch: a lint-sweep finding reaches the finding-builder with no rendered lesson #1761

Open
opened 2026-11-13 20:39:50 +00:00 by jared · 0 comments
Owner

Problem

In /os-sdlc:fast-batch, a plain lint-sweep finding reaches the finding-builder with no rendered lesson and no closing questions.
The red lint gate gives an agent a different text. A lesson is measured against the gate text, so the measured score does not hold for the finding-builder.

Observed

At a red lint gate, Gate::Reply#lint_output (plugins/os-sdlc/lib/os_sdlc/gate/reply.rb:34-40) gives the agent three parts:

  • Each offense line (path:line:col Cop: message).
  • One rendered lesson for each cop, from Lesson::Relay#render.
  • The two closing questions of OffenseDirective::QUESTIONS (lib/os_sdlc/offense_directive.rb:27-31).
    In /os-sdlc:fast-batch, a finding from a detector gets a rendered lesson from the same Lesson::Relay (lib/os_sdlc/detector/signal_section.rb:15-17). It gets no closing questions, and the lesson repeats for each signal.
    A plain lint-sweep finding is a rubocop cop with no detector. It gets less.
    bin/lint-sweep prints rubocop clang text with no lesson (lib/os_sdlc/lint/sweeping.rb:33-38).
    The skill text (plugins/os-sdlc/skills/fast-batch/SKILL.md:44-46) tells the orchestrator to use "the lint-sweep offense lines and the lesson file path as the evidence". The brief template (plugins/os-sdlc/skills/fast-batch/references/batch-brief.md:24-26) says the same.
    The finding-builder then reads the raw lesson YAML. No code decides which offense lines it gets, and it gets no closing questions.
    On 2026-11-13, a simulation round scored the ConceptCycle lesson package with the gate reply text (docs/research/lint-lessons/2026-11-13-concept-cycle-kinds/simulation/round-1/). The score does not hold for a finding-builder, because it receives a different text.
    The new cops Sdlc/Structural/ClassInWrongConcept, StartingCodeInSharedConcept, and ConceptCallsItsCaller (#1749 to #1751) have no detector. A sweep of them takes this path.
    On main, .rubocop-sweep.yml enables seven Sdlc/Structural/* cops: InwardDependency, UnlayeredConstant, ForwardingClass, EffectInModel, UnderscoredParameter, ReachThroughChain, and RescueSite. Each of them takes the same path when it has no detector.
    The owner has ruled that the ConceptCycle increment adds no new delivery path (ruling 151 area, docs/decisions/rulings.tsv). This ticket records the gap for a later decision.

Reproduce

n/a: process gap found by a read of the code; no failing command.

Origin

  • Trigger: a read of the /os-sdlc:fast-batch evidence step during the ConceptCycle lesson package work on 2026-11-13
  • Improvised this session: none
  • Chain: a finding-builder gets a text that differs from the measured gate text ← a lint-sweep finding with no detector carries only offense lines and a lesson file path ← DESIGN: plugins/os-sdlc/skills/fast-batch/SKILL.md:44-46 and plugins/os-sdlc/skills/fast-batch/references/batch-brief.md:26 name no renderer for this case
  • Root candidate: none found; searched finding-builder, closing questions, rendered lesson, lint-sweep lesson
  • Where: plugins/os-sdlc/skills/fast-batch/SKILL.md:44-46 and plugins/os-sdlc/skills/fast-batch/references/batch-brief.md:26
  • 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 - the handoff asked for the gap to be noted; no open ticket covers this mechanism; the delivery path is a deferred owner decision.
## Problem In `/os-sdlc:fast-batch`, a plain lint-sweep finding reaches the finding-builder with no rendered lesson and no closing questions. The red lint gate gives an agent a different text. A lesson is measured against the gate text, so the measured score does not hold for the finding-builder. ## Observed At a red lint gate, `Gate::Reply#lint_output` (`plugins/os-sdlc/lib/os_sdlc/gate/reply.rb:34-40`) gives the agent three parts: - Each offense line (`path:line:col Cop: message`). - One rendered lesson for each cop, from `Lesson::Relay#render`. - The two closing questions of `OffenseDirective::QUESTIONS` (`lib/os_sdlc/offense_directive.rb:27-31`). In `/os-sdlc:fast-batch`, a finding from a detector gets a rendered lesson from the same `Lesson::Relay` (`lib/os_sdlc/detector/signal_section.rb:15-17`). It gets no closing questions, and the lesson repeats for each signal. A plain lint-sweep finding is a rubocop cop with no detector. It gets less. `bin/lint-sweep` prints rubocop clang text with no lesson (`lib/os_sdlc/lint/sweeping.rb:33-38`). The skill text (`plugins/os-sdlc/skills/fast-batch/SKILL.md:44-46`) tells the orchestrator to use "the lint-sweep offense lines and the lesson file path as the evidence". The brief template (`plugins/os-sdlc/skills/fast-batch/references/batch-brief.md:24-26`) says the same. The finding-builder then reads the raw lesson YAML. No code decides which offense lines it gets, and it gets no closing questions. On 2026-11-13, a simulation round scored the `ConceptCycle` lesson package with the gate reply text (`docs/research/lint-lessons/2026-11-13-concept-cycle-kinds/simulation/round-1/`). The score does not hold for a finding-builder, because it receives a different text. The new cops `Sdlc/Structural/ClassInWrongConcept`, `StartingCodeInSharedConcept`, and `ConceptCallsItsCaller` (#1749 to #1751) have no detector. A sweep of them takes this path. On `main`, `.rubocop-sweep.yml` enables seven `Sdlc/Structural/*` cops: `InwardDependency`, `UnlayeredConstant`, `ForwardingClass`, `EffectInModel`, `UnderscoredParameter`, `ReachThroughChain`, and `RescueSite`. Each of them takes the same path when it has no detector. The owner has ruled that the `ConceptCycle` increment adds no new delivery path (ruling 151 area, `docs/decisions/rulings.tsv`). This ticket records the gap for a later decision. ## Reproduce n/a: process gap found by a read of the code; no failing command. ## Origin - Trigger: a read of the `/os-sdlc:fast-batch` evidence step during the `ConceptCycle` lesson package work on 2026-11-13 - Improvised this session: none - Chain: a finding-builder gets a text that differs from the measured gate text ← a lint-sweep finding with no detector carries only offense lines and a lesson file path ← DESIGN: `plugins/os-sdlc/skills/fast-batch/SKILL.md:44-46` and `plugins/os-sdlc/skills/fast-batch/references/batch-brief.md:26` name no renderer for this case - Root candidate: none found; searched finding-builder, closing questions, rendered lesson, lint-sweep lesson - Where: plugins/os-sdlc/skills/fast-batch/SKILL.md:44-46 and plugins/os-sdlc/skills/fast-batch/references/batch-brief.md:26 - 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 - the handoff asked for the gap to be noted; no open ticket covers this mechanism; the delivery path is a deferred owner decision.
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#1761
No description provided.