Commit 34b2ffb
The screen and its wiring already shipped. What was missing is the row's PROOF CLAUSE: nothing
stopped the report being emptied by a one-line edit that looks like reclassifying a field.
MEASURED, NOT READ. The dispatch said limb 2's absence rested on reading the test module plus two
history searches, with no executed mutation. So I ran one. Moving "uploader" from ACCESS_KEY_NAMES
into LABEL_NAMES:
the suite 10 passed -> 10 passed, unchanged
the live report 8 candidates -> 7; excluded 80 -> 81
api/app.py save(uploader=...) DISAPPEARS from the report entirely
The uploads site stops being surfaced for judgement and is silently recorded as "excluded as
correct". Nothing reds. Being absent from a report is indistinguishable from having been adjudicated
correct, which is the whole defect.
*** A DISJOINTNESS TEST DOES NOT CATCH IT, and that is the trap. *** The mutation REMOVES the name
from one set and ADDS it to the other, so the two stay disjoint throughout. Membership has to be
PINNED -- the device tests/test_private_paths_stay_ignored.py already uses.
THREE TESTS, TWO ROUTES, AND THEY DISCRIMINATE RATHER THAN OVERLAPPING. Each set-level guard fires
on its own route only, which is what shows they are two tests and not one wearing two names:
mutation pin overlap proof clause
move uploader (remove + add) FIRES silent FIRES
add uploader to LABEL_NAMES only silent FIRES FIRES
Both scored by applying the mutation, running, and restoring from a byte copy, hash-verified
identical each time.
THE PROOF CLAUSE IS ASSERTED ON THE SHIPPED SCREEN'S OUTPUT, not on its constants, and that is
deliberate: the two set-level tests each cover one narrowing route, while the report assertion
covers the OUTCOME regardless of route -- a rule change or a scope change would red it too.
IT DOES NOT CALL THE SITE A DEFECT, which the row is explicit about. `uploader=identity.username`
may well be correct code -- a sibling `uploader_id` can carry the key. The screen emits CANDIDATES,
never verdicts, and several reported sites are correct. What is asserted is that a reader still gets
to SEE it and decide. That constraint pulls against the other one -- the report must stay reviewable
AND must not become a verdict -- and dropping either gives the wrong artifact.
I DID NOT REBUILD THE SCREEN. The dispatch warned that a builder reading only the row's opening
would, and it is already on main and already wired into ci.yml and pre-commit. My own screen
confirmed it: 5 BACKLOG-form commits postdating the 2026-08-11 filing.
VERIFIED, scope named:
pytest 13 passed, tests/test_username_access_key_screen.py (10 -> 13)
ruff format --check, ruff check, mypy -- run separately, each with its own exit code, all clean.
mypy flagged my own helper for a missing return annotation and I fixed it rather than leaving a
known error on the grounds that CI does not cover tests/.
the shipped screen run directly, before and after each mutation
NOT a full-suite run
Co-authored-by: wshallwshall <mefordev@messagefoundry.org>
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
1 parent 0849620 commit 34b2ffb
1 file changed
Lines changed: 88 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
36 | 36 | | |
37 | 37 | | |
38 | 38 | | |
| 39 | + | |
39 | 40 | | |
40 | 41 | | |
41 | 42 | | |
| |||
249 | 250 | | |
250 | 251 | | |
251 | 252 | | |
| 253 | + | |
| 254 | + | |
| 255 | + | |
| 256 | + | |
| 257 | + | |
| 258 | + | |
| 259 | + | |
| 260 | + | |
| 261 | + | |
| 262 | + | |
| 263 | + | |
| 264 | + | |
| 265 | + | |
| 266 | + | |
| 267 | + | |
| 268 | + | |
| 269 | + | |
| 270 | + | |
| 271 | + | |
| 272 | + | |
| 273 | + | |
| 274 | + | |
| 275 | + | |
| 276 | + | |
| 277 | + | |
| 278 | + | |
| 279 | + | |
| 280 | + | |
| 281 | + | |
| 282 | + | |
| 283 | + | |
| 284 | + | |
| 285 | + | |
| 286 | + | |
| 287 | + | |
| 288 | + | |
| 289 | + | |
| 290 | + | |
| 291 | + | |
| 292 | + | |
| 293 | + | |
| 294 | + | |
| 295 | + | |
| 296 | + | |
| 297 | + | |
| 298 | + | |
| 299 | + | |
| 300 | + | |
| 301 | + | |
| 302 | + | |
| 303 | + | |
| 304 | + | |
| 305 | + | |
| 306 | + | |
| 307 | + | |
| 308 | + | |
| 309 | + | |
| 310 | + | |
| 311 | + | |
| 312 | + | |
| 313 | + | |
| 314 | + | |
| 315 | + | |
| 316 | + | |
| 317 | + | |
| 318 | + | |
| 319 | + | |
| 320 | + | |
| 321 | + | |
| 322 | + | |
| 323 | + | |
| 324 | + | |
| 325 | + | |
| 326 | + | |
| 327 | + | |
| 328 | + | |
| 329 | + | |
| 330 | + | |
| 331 | + | |
| 332 | + | |
| 333 | + | |
| 334 | + | |
| 335 | + | |
| 336 | + | |
| 337 | + | |
| 338 | + | |
| 339 | + | |
0 commit comments