The folder said 99 and the list showed 96: bug write-up, and the pages it makes stale
Ed asked for the counts-vs-list gap fixed rather than caveated, so the two folder
pane pages no longer describe a live bug and the fix gets its own write-up.
Folder-Counts-Did-Not-Match-The-List.md - a Bugs-Resolved page, following the
house structure: what you saw, what was actually wrong, how it was fixed, the
files, and how it was proved. There was no issue number because it was found
while building #73, so it is credited that way - the same treatment the
Watchtower row already uses.
The write-up carries three things worth keeping:
- it was TWO unrelated faults adding to one symptom, and each was about half
the gap. Merged-away tickets were still counted; and the list was built
starting from email messages, so a ticket with no email was counted
everywhere, listed nowhere and openable by no route at all.
- the list excluded merged tickets only BY ACCIDENT - a merge moves the emails
and the list was built from emails. A behaviour that is right by accident
holds only until somebody changes what it was accidentally relying on.
- the regression it nearly shipped with: giving the ticket-opening query one
join that restricts to the initial email is right for a ticket-id lookup and
wrong for an email-id one, which carries the latest message. It would have
fixed three tickets and broken opening every ticket ever replied to. When a
fix changes a shared query, test the case it was ALREADY handling.
Ticket-Folder-Pane.md - the warning is replaced by what is now true, plus two
new bullets (merged tickets are not counted; a ticket with no email still shows).
Ticket-Folder-Pane-Developer-Guide.md - section 8 rewritten from "known bug" to
the fix and the four details that travel with the inversion; the $ttSql snippet
in section 2 now shows the merged exclusion; sample numbers updated to post-fix.
Bugs-Resolved gains a row, the sidebar an entry. Every link and every named
source file verified.
The ticket folder pane: user page and developer guide
Two pages for the left-hand panel of the inbox, prompted by GH #73.
Ticket-Folder-Pane.md - the user page. The grouping toggle, what expands and
what the counts mean, all four fixed folders, and a full table of what dragging
onto each kind of row actually changes. The section worth having is Unassigned:
it means "no department" when grouped by department and "nobody working on it"
when grouped by analyst, which are genuinely different sets (62 vs 54 on a real
install), so the numbers change when you flip the toggle and that surprises
people. Also states the known counts-vs-list discrepancy plainly rather than
letting somebody discover it and assume the counts are broken.
Ticket-Folder-Pane-Developer-Guide.md - not just the SQL, per Ed's ask:
- the single counts request, and the rule that every breakdown reuses the
WHERE clause of the total it sits under - which is what makes children sum
to parents instead of drifting apart;
- `currentFilter` as the one object driving the pane, the four places a new
view has to be wired into, and why updateActiveFolderClasses() exists at all
(re-rendering to move a highlight kills the CSS grid-row transition);
- toggleFolder() and the three different ways a folder is identified - All
Tickets and Unassigned have no id, so `${kind}_${id}` yields
'dept_undefined' and silently expands nothing;
- the grouping toggle: a pure re-render with no round trip, because both
structures are always sent, plus the per-analyst preference;
- the loadEmails() race and the token that fixes it, including how it was
found - an intermittent test failure I had already dismissed once as a flaky
harness;
- the drag-and-drop payload table and the principle behind it: a drop must
mean exactly what the row means and no more, which is why a status under All
Tickets sets the status alone;
- the counts-vs-list bug with a repro query and why it is its own job;
- how to test it, since there is no PHP suite: drive the real page, assert
against the API rather than the folder count, and always ship a negative
control.
Sidebar updated under Tickets. Every internal link and every named source file
verified to resolve.