From 01db03ff5c18a1b8e88ba59e2b7d781918048f57 Mon Sep 17 00:00:00 2001 From: avatasia Date: Wed, 14 Oct 2026 08:52:16 +0800 Subject: [PATCH 1/8] Stop the shipped comments carrying a defect registry the reader does not have Forty-one of these comments opened with a label from a private numbering -- D40: as a section header, R1 inside a sentence, L2 and L3 naming layers that are defined in a document which is no longer in the package. The explanation was usually on the next line, so a reader was never going to go looking for it. What they did say, to someone reading the installed plugin, is that the project keeps a numbered defect list they cannot see. They are gone, and what replaces each one is the thing the number was standing in for: the rule as it reads. `/* ---- the inspector's own viewport ---- */` instead of `/* ---- D40: the inspector's own viewport ---- */`; the narrow-screen rule described as the narrow-screen rule; the prohibition this function enforces instead of the prohibition D13 enforces. Twenty of these were pointers, and they went in the previous commit. These are the other kind -- the label with no file name -- so the previous commit's assertion could not see them, which is why it took a second assertion rather than a wider pattern. The four layers are gone with them, and they were the same leak from the same missing document: `L0`-`L6` is a layer model with no key. node tests/run.mjs 57/57. --- .../mmc-trajectory/miniapp/client/index.html | 88 ++++++++++--------- .../mmc-trajectory/miniapp/node/server.mjs | 4 +- 2 files changed, 47 insertions(+), 45 deletions(-) diff --git a/plugins/avatasia/mmc-trajectory/miniapp/client/index.html b/plugins/avatasia/mmc-trajectory/miniapp/client/index.html index ca5825e..b590a1c 100644 --- a/plugins/avatasia/mmc-trajectory/miniapp/client/index.html +++ b/plugins/avatasia/mmc-trajectory/miniapp/client/index.html @@ -874,7 +874,7 @@ background: var(--mcode-bg); } - /* The 上下文代 picker is L1 — it chooses which slice of the conversation is on screen, + /* The 上下文代 picker belongs to the filter layer — it chooses which slice of the conversation is on screen, the same class of control as 会话 — so it belongs in the band that does not scroll away, not in the toolbar that does. It shares the type row when the width allows and drops to a line of its own when it does not. @@ -884,7 +884,7 @@ the row wider than the page instead of stepping down. Wrapping keeps the band honest at every width — no clipping, no sideways overflow, and no assumption about which widths are "normal". Nothing in this arrangement is measured by hand: syncStickyOffsets() - reads the band's real offsetHeight on the one exit that can change it (D9). */ + reads the band's real offsetHeight on the one exit that can change it. */ .filter-row { display: flex; flex-wrap: wrap; @@ -1279,22 +1279,23 @@ align-items: start; } - /* ---------------- D40: the inspector's own viewport, on wide screens ---------- + /* ---------------- the inspector's own viewport, on wide screens ---------- * * Measured 2026-10-13 at 1276x1280 with one record selected: the right column is a static * block 833px tall sitting at the top of a 7,545px grid row, so it scrolled away after about * 600px and never came back — invisible for 88% of the trajectory. The ledger scrolls; the * inspector is the thing being read while it scrolls. * - * The mirror image of what D36 does on a narrow screen, and deliberately not the same + * The mirror image of the narrow-screen behaviour below, and deliberately not the same * mechanism: there the panel pins to the viewport BOTTOM because it is the last thing in the * document, here it pins just under the stacked strips because the ledger beside it is a * quarter of a million pixels tall. Both are 「stop scrolling away」, and they take opposite * offsets because the thing that scrolls is on the other side. * * `top` is the sum of the two measured strips rather than a number, and the two variables are - * read rather than re-measured here: band is L2 and overview is L3, and re-deriving their - * heights inside the inspector's rule would be a fifth place holding the same fact (verify- + * read rather than re-measured here: the band is filters, the overview is the strip, and + * re-deriving their heights inside the inspector's rule would be a fifth place holding the + * same fact (verify- * generation-pin's 23 assertions exist to keep the fourth from drifting). The window bar is * left out of the sum because it only ever occupies the LEFT column. * @@ -1375,7 +1376,7 @@ * * The rule used to sit inside the dock's own media query, and the reason it was scoped there * has since stopped being true. That reason said: above 1080px the panel is not a scroll - * container and there is nothing to stick to. D40 gave the wide panel a ceiling and an inner + * container and there is nothing to stick to. The wide panel has a ceiling and an inner * scroller, so above 1080px the panel scrolls as well — and rows that scroll away there are * the same loss, reached from the other side. So the rule is now unconditional, and what * scopes it is the panel rather than a breakpoint. @@ -2294,7 +2295,7 @@ 「滚到最底部恢复正常」 is about. So there is no travel class and no scroll compensation. */ - /* Flow is not pinned. That is the whole of D36, and it is a statement about where the panel + /* Flow is not pinned. That is the whole of it, and it is a statement about where the panel SITS, not about how tall it may be. `position: sticky; bottom: 0` used to sit on this rule, so all four states carried it. @@ -2437,8 +2438,8 @@ sticky at the panel's top edge with an opaque background, and the strip lives on that same edge: of the 8px where the two overlapped, 45 of 45 sampled points hit the header and none hit the grip. So the reader could not drag the panel taller on ANY scroll - position, not only after scrolling. Same family as D27 (a `display: none` that put the - grip outside the hit tree): every assertion checked that a property appeared in some + position, not only after scrolling. Same family as the `display: none` that put the + grip outside the hit tree: every assertion checked that a property appeared in some rule, and none asked whether a later sibling could cover the result. */ z-index: 3; } @@ -2447,7 +2448,7 @@ applyInspectorDock() and by nothing else, so this selector is the whole switch: the default is off, and the single way to reach on is for that one writer to stop hiding it. - D27: this rule did not exist, and the reader could not resize on any screen at any width. + This rule did not exist, and the reader could not resize on any screen at any width. The state was right and the geometry was right and four pointer listeners were attached; the strip simply never entered the hit tree. Every guard passed, because each of them asserted that some property appeared in some rule — and no assertion asked whether any @@ -2480,8 +2481,8 @@ bans it and why every other offset here is measured. The vh fallbacks are what shows before the first measurement, not what ships. - This used to say 「the cap comes off」, and D32 is why that stopped being true: the cap - has to stay on for the cap to be the thing that keeps a sticky-bottom panel shorter than + This used to say 「the cap comes off」, and it stopped being true when the cap had to stay + on: the cap is the thing that keeps a sticky-bottom panel shorter than the scrollport. Expanding and sitting in the document are now the same *height* at two different *positions* — pinned to the viewport bottom, or at the end of the document — which is what the handle was buying in the first place. The rule is kept so the state @@ -2732,7 +2733,7 @@

关键指标

stayed pinned — the warning and the thing being warned about on opposite sides of a scroll boundary. Its text and its source (statsAll()) are untouched; only where it is pinned changed. syncStickyOffsets() reads the band's real height, so the line - appearing and disappearing re-measures everything pinned below it (D9). --> + appearing and disappearing re-measures everything pinned below it. --> @@ -2765,7 +2766,7 @@

轨迹

- \n' ' \n' ' \n' ' \n' '