Lens proposal: promote the deferred A2 clause for a second caller that an open ticket names #1712
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#1712
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
LENS: A2 broken at lib/decision/model/error_kind.rb:5 - BREAKS: top-level ErrorKind has library callers in one concept only (Batch::Pass). JUSTIFIED: yes, the ticket fixes Model::ErrorKind as the public seam in error_kind_test.rb and the owner sketch; nesting it would change a ticket test (principle 7), so it is not a production-only move. PROPOSAL: NONE, the commit message records the reason; revisit when a second caller appears or the ticket seam is reopened.
Source: contract audit dispatch 80 of os-sdlc implementation 7, decision-model ticket #25.
Approach
Challenge verdict from an opus agent that used
references/lens-challenge-checklist.md: edit proposed. The warrant in the audit ("public seam") is not the correct one.The correct warrant: open ticket decision-model #26 names
Comparisonas the second caller ofErrorKind, by constant, andComparisonis in a different concept (lib/decision/model/comparison.rb:25-28classifies the same errors itself today). To nestErrorKindnow would cause two moves and two test-contract changes.This is a second case, from a different project, of the deferred A2 clause from 2026-11-02 (os-sdlc,
Structural::EdgeScope/EffectReach): "NOT a top-level object whose second caller, in another concept, an open ticket names by constant and path; check again when that ticket closes or is dropped." The checklist says to promote a deferred clause in this condition.Open point (checklist Q11): A2 counts callers "as A15 does"; if the clause goes only into A2, A15 still says to nest. The editor decides: put the clause in the counting sentence of A15 too, or accept that A2 and A15 conflict here.
Signal line for checklist step 7 (not appended; the challenge was read-only): {"date":"2026-11-12","verdict":"edited","project":"decision-model","object":"ErrorKind","clause":"NOT a top-level object whose second caller, in another concept, an open ticket names by constant and path; check again when that ticket closes or is dropped.","evidence":"lib/decision/model/error_kind.rb:5; lib/decision/model/batch/pass.rb:56; lib/decision/model/comparison.rb:25-28; ticket decision-model #26"}
Required work: none beyond the acceptance criteria.
Origin
Session: 6098efae-bfd3-433e-9752-524dfeb59c5c
Transcript: /home/jared/.claude/projects/-home-jared-dev-ruby-gems-decision-model/6098efae-bfd3-433e-9752-524dfeb59c5c.jsonl
Where: os-sdlc lens heuristic A2; decision-model
lib/decision/model/error_kind.rb:5Discoverer: decision-model, session 6098efae-bfd3-433e-9752-524dfeb59c5c, 2026-11-12. os-sdlc implementation 7 (ticket #25).
Occurrence: Lens proposal: A15 NOT-clause for a top-level object whose second-concept caller an open ticket or ruling names
Seen: plugins/os-sdlc/lib/os_sdlc/code_shape/lexical_scope.rb:5 (CodeShape::LexicalScope, one Lint caller; #1734 and ruling 145 name the cops concept as the second caller)
Run: implementation 286 (#1729), session 784c0808-1e40-4296-8f93-77c40ca419c2
Adds: the same deferred clause now fires under A15, from a second concept (Lint; the A2 case was cops). Opus challenge verdict: edit proposed. Proposed A15 NOT: "NOT a top-level object whose caller in a second concept an open ticket or ruling names by constant; check again when that ticket closes or is dropped." Signal line committed: lens-signals/A15.jsonl (
abef796). LENS line: A15 broken at code_shape/lexical_scope.rb:5 -- JUSTIFIED: yes, ruling 145 names CodeShape the shared owner for seven callers across concepts (#1718).