fix(6471): the end-of-turn shape check hears every definition a write made
The write hooks recorded at most 12 definitions per write (alphabetical, so test functions were the ones dropped) and the post-Bash hook stopped after 4 files, so the Stop hook never asked about the rest. The caps bound the prior-art query; the written ledger now gets the full list, up to 40 files per Bash call, while the query stays at 4 files x 12 names. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -90,6 +90,23 @@ def test_after_write_names_what_bash_just_wrote_then_stays_quiet_until_the_next_
|
||||
assert seen[0]["exclude_derive"] == ["dup:483a"]
|
||||
assert set(seen[0]["shapes"][0].split(",")) == {"css:log-empty", "css:other"}
|
||||
|
||||
def test_after_write_records_every_definition_for_the_turn_but_queries_only_the_first_four_files(tmp_path):
|
||||
"""The end-of-turn ledger hears every file and every definition a Bash call
|
||||
wrote; the prior-art arms stay bounded to four files and twelve names."""
|
||||
with http_sink(SINK_REPLY) as (port, seen):
|
||||
env = _env(tmp_path, url=f"http://127.0.0.1:{port}")
|
||||
repo = _repo(tmp_path, env)
|
||||
for n in range(6):
|
||||
body = "".join(f"def f{n}_{i:02d}():\n return {i}\n\n" for i in range(15))
|
||||
(repo / f"gen{n}.py").write_text(body)
|
||||
_run(repo, env, session="s-many")
|
||||
ledger = (tmp_path / "grimoire-priorart" / "s-many.written.ids").read_text().splitlines()
|
||||
assert len(ledger) == 6 * 15
|
||||
assert "gen5.py\tsym\tf5_14" in ledger
|
||||
assert len(seen) == 4
|
||||
assert all(len(q["shapes"][0].split(",")) == 12 for q in seen)
|
||||
|
||||
|
||||
def test_after_write_is_silent_where_it_has_nothing_to_say(tmp_path):
|
||||
env = _env(tmp_path)
|
||||
repo = _repo(tmp_path, env)
|
||||
|
||||
@@ -103,6 +103,19 @@ def test_an_edit_to_an_existing_file_adds_no_file_line(tmp_path):
|
||||
assert lines == ["lib.py\tsym\thelper"]
|
||||
|
||||
|
||||
def test_a_write_with_many_definitions_notes_every_one(tmp_path):
|
||||
"""The ledger is not bounded by the twelve names the prior-art query sends:
|
||||
a new test file with twenty functions is asked about in full."""
|
||||
with http_sink(b'{"note_ids":[]}') as (port, _seen):
|
||||
env = _env(tmp_path, f"http://127.0.0.1:{port}")
|
||||
repo = _repo(tmp_path)
|
||||
body = "".join(f"def test_case_{i:02d}():\n assert {i}\n\n" for i in range(20))
|
||||
_pre_write(env, repo, "test_many.py", body)
|
||||
lines = _ledger(tmp_path).read_text().splitlines()
|
||||
assert len(lines) == 20
|
||||
assert "test_many.py\tsym\ttest_case_19" in lines
|
||||
|
||||
|
||||
def test_a_skipped_path_notes_nothing(tmp_path):
|
||||
with http_sink(b'{"note_ids":[]}') as (port, _seen):
|
||||
env = _env(tmp_path, f"http://127.0.0.1:{port}")
|
||||
|
||||
Reference in New Issue
Block a user