align(4909b): every write with a path gets its rule check, whether or not prior art matched
CI & Build / Python lint (push) Successful in 2s
CI & Build / Plugin hooks (push) Successful in 14s
CI & Build / TypeScript typecheck (push) Successful in 53s
CI & Build / integration (push) Successful in 1m4s
CI & Build / Python tests (push) Successful in 1m56s
CI & Build / Build & push image (push) Successful in 22s
CI & Build / Python lint (push) Successful in 2s
CI & Build / Plugin hooks (push) Successful in 14s
CI & Build / TypeScript typecheck (push) Successful in 53s
CI & Build / integration (push) Successful in 1m4s
CI & Build / Python tests (push) Successful in 1m56s
CI & Build / Build & push image (push) Successful in 22s
The write-path rule arm ran only past the notes guard: a write whose code matched no snippet, issue or lesson returned before any rule was searched. It now runs before that guard, on `code or path`, and a write that matched nothing but a rule still returns the rule lines. Operator ruling (2026-10-05): yes. A rule about the file being written does not depend on a snippet resembling it. Cost: one more rule search per write that matched no prior art, with its own embedding (the query is `code or path`, not the notes arm's concept query, so the per-request memo does not cover it). Plus the preference slot from (c) on those writes. Expected telemetry shift, to be read on its own once this reaches main: write_path_rule calls rise toward write_path's count (14 days to 2026-10-22: write_path_rule 4,634 against write_path 3,786 — the notes arm skips trivial payloads, the rule arm does not, so the rule arm will now exceed it). Its zero-result share rises too, since the newly covered writes are the ones that matched nothing in the notes corpus. Tests: the gate test is inverted (a write with no prior art still gets its rule check); the design-only write now runs the rule arm on its path; two notes-arm tests read the write_path row instead of any row, since the rule arm writes its own. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -181,12 +181,13 @@ async def test_a_ui_write_with_no_prior_art_still_hears_the_design_system():
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_a_design_only_write_does_not_switch_the_rule_arm_on():
|
||||
"""The rule arm runs only where there is prior art. A design line that
|
||||
joined that gate would start a semantic rule search on every UI write —
|
||||
a new population of calls under a floor tuned without them."""
|
||||
_, rules = await _hint(_quiet())
|
||||
rules.assert_not_called()
|
||||
async def test_a_write_with_only_a_design_line_still_gets_its_rule_check():
|
||||
"""Every write with a path gets the rule check, prior art or not. With
|
||||
nothing ranked, the design line still arrives on its own."""
|
||||
out, rules = await _hint(_quiet())
|
||||
rules.assert_awaited()
|
||||
assert rules.await_args_list[0].args[1] == "frontend/src/B.vue"
|
||||
assert out["context"].startswith("> Design system binds `frontend/src/B.vue`")
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
|
||||
Reference in New Issue
Block a user