backlog: archive #324, file #1025-#1027, and stop a PHI-route enumeration being a closed count - #204
Merged
Merged
Conversation
…tion being a closed count ARCHIVE #324, closed by PR #203, moved verbatim. FILE THREE, all reported by lanes rather than fixed in them, and each re-verified against the code at e0482ae before its body was written. #1026 (6/3) -- the ASVS 12.1.1 TLS-floor probe's gate requires FOUR conditions while the comment above it names three and says "every other posture never reaches here". The undocumented fourth is `public_origin`, and the refusal for an unset `public_origin` is itself gated on `serve_ui` -- so with the console OFF a PHI instance behind a declared terminator under `enforce` starts with the probe silently inert. The same block `return 2`s when the probe's MECHANISM is unavailable, explicitly because a no-op "reports success forever afterwards": it refuses a silent no-op one level down and performs one one level up.⚠️ THE ORIGINATING REPORT'S MECHANISM WAS WRONG and the body says so. It claimed the console "auto-degrades" so `public_origin` stays unset; `public_origin` is an independent optional setting and `serve_web_console` maps to `api.serve_ui` -- neither derives the other. The conclusion held, the mechanism did not, and filing it as reported would have sent a fixer looking for a degradation path that does not exist. This is why it was held back from the previous ledger pass. #1025 (5/2) -- three `require_ui_step_up` routes emit PHI with no `phi=`, so `require_ui`'s `allow_phi_read` throttle never runs for them. A missing RATE LIMIT, not a missing authorization check; all three still gate on the right permission. Difficulty 2 is inherited: #324 already built the `phi=` seam. #1027 (5/3) -- `testpaths = ["tests"]` means the command CLAUDE.md:333 documents as the verification gate never collects the webconsole package. A FAILING test sat on main all day unseen because every quartet used the documented single path. Verified NOT a CI gap: ci.yml:250 installs the webauthn extra and runs the webconsole suite as a separate required step, so PRs merged on real coverage -- the gap is local, which is why nothing red ever reached anyone. Difficulty 3 because the naive fix (widen testpaths) makes that same failure the default local experience. STOP THE PHI-ROUTE LIST BEING A CLOSED COUNT. docs/SECURITY.md said "nine more" and omitted POST /ui/messages/{id}/edit-resend, whose `_reject` arm re-renders both the pristine core.get_message detail and the operator's raw_value. Per CLAUDE.md section 11 a completeness claim is a liability, so it is reworded to "at least ten more" with the derivation rule stated (the code is the authority; a route emits PHI if it renders a message body, and the ones charging the budget are those passing phi=True) rather than corrected to "ten" -- which the next PHI route would falsify again. Also corrected: docs/testing/master-test-plan/11-web-console.md:67 said 243 tests / 5389 lines. Measured now 247 / 5501. That citation was EXACTLY right before PR #203 and that PR made it false -- which is the useful distinction: a citation nobody has broken yet and a citation nobody has noticed is broken look identical in a grep, and only the change that breaks it can tell them apart. Census re-derived FROM the final table: 108 open, 108 rows, ranks contiguous, bijection empty both directions, all four lines summing to 108, 303 items across both files each declaring exactly one status. Frozen 2026-07-10 snapshot asserted byte-identical. NB the --min-items floor is left at 300 against a corpus of 303. Three items of slack, versus the 23 found yesterday. Raising it every pass would make each ledger commit touch ci.yml, since the floor is pinned in two places -- which is an argument for DERIVING it, not for raising it more often. Left for #1018.
wshallwshall
enabled auto-merge (squash)
August 5, 2026 06:12
wshallwshall
added a commit
that referenced
this pull request
Aug 5, 2026
… ten of its items shipped (#205) SCHEDULABLE-BACKLOG-MULTISESSION-PLAN.md is read by sessions deciding WHAT TO BUILD, which is what makes this worse than an ordinary stale line: it does not misinform a reader about a fact, it misroutes work. The failure is already on record for this exact file -- a session dispatched from it this morning and inherited a SUPERSEDED section D RULE 1, whose ownership clause the owner had amended on 2026-08-04. Verified before writing, not transcribed: all ten claimed-shipped items (#233, #322, #324, #326, #330, #334, #335, #336, #341, #347) are closed or archived; the ledger is 108 open; 26 open items are numbered >=1000 and were filed after the plan existed. NO RUNNING COMPLETION COUNT, deliberately. Per CLAUDE.md section 11 a count embedded in prose is a liability -- it would go stale the moment the next lane lands, which is exactly how the line being fixed here got wrong. What is stated instead is the AUTHORING BASELINE as fixed history (92 open items at authoring) plus a dated snapshot of what has shipped, and a pointer to the ledger as the live record. Same reasoning as the docs/SECURITY.md PHI-route rewording in #204: stop asserting a count rather than correct one. The planning gap is recorded, not closed: 77 open items have no wave assignment and file contention has not been re-derived across the combined set, so scheduling from this document alone would both miss work and under-count collisions. Re-planning is a genuine multi-agent pass and an owner call.⚠️ NOTE this file sits inside docs/releases/, which ADR 0160 Phase 1 proposes removing from the public repo. Fixing it anyway: Phase 1 is unratified, and a dispatch document that misroutes work does so TODAY. If Phase 1 lands, nothing is lost.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Ledger pass plus the two documents it exposed. Docs-only, which makes this the first real exercise of the doc-guard steps #202 landed — if that step is broken it reds this PR, which is the fail-closed behaviour I claimed for it.
Three items filed, each re-verified before its body was written
public_origin, whose refusal is itself gated onserve_ui— so with the console off, a PHI instance behind a declared terminator underenforcestarts with the probe silently inert.require_ui_step_uproutes emit PHI with nophi=, so theallow_phi_readthrottle never runs. A missing rate limit, not a missing authorization check.testpaths = ["tests"]means the command CLAUDE.md:333 documents as the gate never collects the webconsole package. A failing test sat onmainall day unseen.#1026's sharpest detail: the same block
return 2s when the probe's mechanism is unavailable, explicitly because a no-op "reports success forever afterwards." It refuses a silent no-op one level down and performs one, silently, one level up.public_originstays unset.public_originis an independent optional setting andserve_web_consolemaps toapi.serve_ui— neither derives the other. The conclusion held; the mechanism did not. This is why it was held back from the previous ledger pass rather than filed on an unverified chain.#1027 verified as NOT a CI gap rather than assumed:
ci.yml:250installs-e ".[dev,harness,fhir,dicom,x12,xml,webauthn]"plus the webconsole package and runs it as a separate required step, so PRs merged on real coverage. The gap is local only — which is precisely why nothing red ever reached anyone.The enumeration is no longer a closed count
docs/SECURITY.mdsaid "nine more" PHI routes and omittedPOST /ui/messages/{id}/edit-resend, whose_rejectarm re-renders both the pristinecore.get_messagedetail and the operator'sraw_value.Per CLAUDE.md §11 a completeness claim is a liability, so it is reworded to "at least ten more" with the derivation rule stated — the code is the authority, a route emits PHI if it renders a message body, and the ones charging the budget are those passing
phi=True— rather than corrected to "ten", which the next PHI route would falsify again.A citation that was right until it wasn't
docs/testing/master-test-plan/11-web-console.md:67said 243 tests / 5389 lines. Measured now 247 / 5501. That was exactly right before #203 and #203 made it false — the useful distinction being that a citation nobody has broken yet and a citation nobody has noticed is broken look identical in a grep, and only the change that breaks it can tell them apart.Ledger verification
backlog_status_check.py: OK, 303 items across both files (108 + 195), each declaring exactly one statusNB the
--min-itemsfloor stays at 300 against 303 — three items of slack, versus the 23 found yesterday. Raising it every pass would make every ledger commit touchci.yml, since the floor is pinned in two places. That is an argument for deriving it, not for raising it more often; left for #1018.