@@ -50,9 +50,74 @@ Dev-Log:
5050
5151Entries
5252-------
53- Change-ID: CL-20260803-147
53+ Change-ID: CL-20260803-149
54+ Commit: pending
55+ Date: 2026-08-03
56+ Type: Fix -- a patch could not say which of several identical places it meant,
57+ and trailing text became part of the hunk
58+ Request-or-TODO: Ladder rung 9
59+ Outcome: A patch names the scope a change is inside in one of two ways: a
60+ heading on the "@@" line, or a hunk of nothing but context immediately before
61+ the change. Both were discarded -- the heading as envelope, the context block
62+ as a hunk that changes nothing -- so a hunk whose context was a closing brace
63+ and its indent was searched for across the whole file and matched once per
64+ function. Rung 9 sent the same six-line patch six times in a row, told each
65+ time to add more context, with the context it needed sitting in the hunk above
66+ it. Both forms now travel as a hunk's Anchor: it is never applied and never
67+ required to match, and its only effect is to narrow where the hunk is looked
68+ for, so a stale scope name costs nothing. Separately, the parser accepts an
69+ unprefixed line as context written without its leading space, which is right
70+ inside a hunk and wrong after "*** End Patch": a run that finished its patch
71+ and wrote a stray "EOF" had that EOF folded into the last hunk, which then
72+ asked the file to contain a line no file contains.
73+ Affected-behavior: apply-patch. Ambiguity refusals fall; a patch followed by
74+ trailing text applies.
75+ Compatibility-or-migration: None. No schema change.
76+ Verification: Rung 9 passes in 502s after six failing passes. Its patch failures
77+ by kind: "does not match anything" fell to 6 of 109 after the end-marker fix,
78+ from dominant before it; "matches N places" was 103 of 109 before the anchor
79+ fix. Six new tests cover both anchor forms, the line-range control that must
80+ not become an anchor, an anchor that resolves to nothing, trailing text after
81+ the end marker, and a second envelope whose hunks must not be dropped.
82+ Dev-Log: DL-20260803-159
83+
84+ Change-ID: CL-20260803-148
5485Commit: pending
5586Date: 2026-08-03
87+ Type: Fix -- a step could not use the tool its own first call made necessary,
88+ and the suite told a run its writes had not landed when they had
89+ Request-or-TODO: Ladder rung 9
90+ Outcome: A write step's kind is resolved once, when the plan is built, from
91+ whether the file is on disk. That stops being true the moment the step's first
92+ call lands. The two write tools then contradicted each other: apply-edit
93+ refuses a second wholesale rewrite and tells the run to send a patch instead,
94+ on a step whose only permitted tool was apply-edit. There was no call the run
95+ could make that would change the file. Rung 9 lost an attempt to it: the fix
96+ for its one failing test was written at 41.9s, refused, rewritten at 50.8s,
97+ refused again, and the attempt ended reporting that its tests did not pass. A
98+ creating step now declares both write tools and the tools themselves decide --
99+ apply-edit refuses a rewrite it has already accepted once, and apply-patch has
100+ nothing to match against in a file that is not there. A patch step is not
101+ widened, because there the file exists from the start. Separately, the no-op
102+ write detection, the staleness flag and the write counter all asked
103+ "== apply-edit", written when that was the only write tool, so from the second
104+ attempt onward -- when every run switches to patching -- none of them saw a
105+ write. A suite answered from the last run therefore told a run "the write did
106+ not land" while four patches had applied cleanly and undone each other; it now
107+ says which of those two things happened.
108+ Affected-behavior: A run can revise the file it just created. A suite answered
109+ from cache names the real reason it is unchanged.
110+ Compatibility-or-migration: None. An edit step's plan now declares two
111+ completion tools; the loop's contract accepts that pair and no other.
112+ Verification: Rung 9 reached its integration tests passing for the first time in
113+ five passes, and reached path-coverage. New tests cover the pair, the
114+ patch-step control, the loop's acceptance of the pair, both notes, and the
115+ write-tool set.
116+ Dev-Log: DL-20260803-158
117+
118+ Change-ID: CL-20260803-147
119+ Commit: 4237a5d
120+ Date: 2026-08-03
56121Type: Chore -- remove code nothing calls, and satisfy the atom lint the commit
57122 hook enforces
58123Request-or-TODO: Unblocking the commit of CL-20260803-140 through -146
@@ -78,7 +143,7 @@ Dev-Log: None: this is cleanup carried out to land the entries above, and it is
78143 nothing.
79144
80145Change-ID: CL-20260803-146
81- Commit: pending
146+ Commit: 5577f21
82147Date: 2026-08-03
83148Type: Checkpoint -- unrelated in-flight work swept in at the user's request
84149Request-or-TODO: User asked for everything in the working tree to be committed
@@ -101,7 +166,7 @@ Dev-Log: None. This work has no development-log entry because this session did
101166 not do it.
102167
103168Change-ID: CL-20260803-145
104- Commit: pending
169+ Commit: 6a5aaa9
105170Date: 2026-08-03
106171Type: Fix -- the patch tool applied a two-file patch to whichever file was named
107172 last, and searched every hunk against the whole file
@@ -133,7 +198,7 @@ Verification: Rung 7's patch record across four passes: 4 of 25 landing, then 10
133198Dev-Log: DL-20260803-155
134199
135200Change-ID: CL-20260803-144
136- Commit: pending
201+ Commit: a965e8b
137202Date: 2026-08-03
138203Type: Fix -- four hard gates were measured only after the loop that was meant to
139204 inform them, and two of them said things that were not true
@@ -168,7 +233,7 @@ Verification: Rungs 4, 6 and 7 pass, each having failed on the gate the change
168233Dev-Log: DL-20260803-153, DL-20260803-154, DL-20260803-155
169234
170235Change-ID: CL-20260803-143
171- Commit: pending
236+ Commit: 658a746
172237Date: 2026-08-03
173238Type: Fix -- the attempt budget and the stall tracker disagreed with themselves
174239Request-or-TODO: Ladder rungs 5 and 9
@@ -195,7 +260,7 @@ Verification: Rung 5 passes. New tests in
195260Dev-Log: DL-20260803-155
196261
197262Change-ID: CL-20260803-142
198- Commit: pending
263+ Commit: ae366b1
199264Date: 2026-08-03
200265Type: Fix -- the loop spent whole attempts on mistakes a round could correct
201266Request-or-TODO: Ladder rungs 1, 4, 5 and 9
@@ -222,7 +287,7 @@ Verification: Rungs 1, 5, 6, 7 and 8 pass. New tests in internal/agent cover eac
222287Dev-Log: DL-20260803-150, DL-20260803-152, DL-20260803-155
223288
224289Change-ID: CL-20260803-141
225- Commit: pending
290+ Commit: 1fb3d24
226291Date: 2026-08-03
227292Type: Fix -- the prompt described the run's own files inaccurately
228293Request-or-TODO: Ladder rungs 1, 4, 5 and 6
@@ -250,7 +315,7 @@ Verification: Rungs 1 through 8 pass. The patch failure rate for a patch written
250315Dev-Log: DL-20260803-151, DL-20260803-152, DL-20260803-153
251316
252317Change-ID: CL-20260803-140
253- Commit: pending
318+ Commit: 004d2f7
254319Date: 2026-08-03
255320Type: Fix -- gates that contradicted each other, and a time report that could not
256321 be read
0 commit comments