38 KiB
P6 Compositor, Steam side: evidence log
Status
Maintenance session 4 (2026-10-07 12:55-14:25 EDT, platform maintainer; build 11094443): REQ C4b->P6 done (surface scaleFrom in the report, §3.1, §6) and, for REQ C2a->P8 #17, a reporter defect fixed: explicit data-lgs-mosaic bands were reported also when the surface had a cover (window / window-full / hero, or Phase 1's cover), against contract §2.3, which drew the window glass with only the bands' content on it; bands now only without a cover shape. Installed (device/lgs_layers.js sha1 ca65765f… = tree, 13:43). Tests on the Frame: RP-MO (new) PASS 7/7, RP-1 PASS (4 states, byte-identical with Phase 1, run with --flags wp.c1a=false because a session override keeps C1a's T2 on), RP-2 PASS (20 plates; checks now ignore live area plates such as C1a's ornament), RP-X PASS 18/18 (its mosaic check now expects no bands in window mode, per §2.3). The harness p6test.py gained rpmo and step options (--flags); the RAM copy in /tmp/lgs/p6/ has them, frag/00-base.json refreshed to the tree's. Open REQs to P6: none (grep 14:20).
Maintenance session (2026-10-07 10:45-, platform maintainer): REQ C3b->P6 done: 00-base.json main.modal also matches .lgs-cc (CC-M's root), so rule 6 drops every other area pop on main while Control Center is open; installed on the Frame; RP-CC PASS (11 checks, 11:08, row below); contract reporter.md §4 and §11. Open REQs to P6: none (grep 11:20). Also checked for C2a's #17 (native Home): the reporter's Home report is as C2a describes (windowless, shapes: [], plates, 4 mosaic bands); the downstream look is P8's row in wp/P8.md.
Review R1 fixed (2026-10-07 09:27, Steam build 11094443; review wp/P6-review-R1.md): both majors and all ten minors are fixed or answered, and every affected test passes again on the Frame (R1 rows in Evidence: RP-1, RP-3/4/5, RP-6, RP-7 (20 checks, new cases C and D), RP-8 (10 checks, computed-paint audit on three routes), RP-X, RP-RV (new, 9 checks), cost in both injection orders). REQ P9->P6 (hole.fill: "auto") and REQ P1->P6 (shared index, no leaked webpack record) done. Disposition of each finding: § Review R1 below. Complete stands.
M1 reached (2026-10-07): contract docs/phase2/contracts/reporter.md; stubs load and are inert until enabled.
M3 reached (2026-10-07 06:15) and complete (2026-10-07 06:25): every build of the card is in the tree and every acceptance test passes on the Frame: RP-1 to RP-8, plus RP-X (the remaining builds: owns, supersedes (also flag-gated), fragment and surface flags, hole/tint/slab/from/sink/exclude/flag, explicit mosaic, occluder, 32-plate cap, rule 7, window request) and a cost check (Evidence below). G-REMOVE (P6 part) clean after a native session. M4 (fragments in native) belongs to the areas; P6 has no area fragment of its own.
What is in the tree:
- Reporter v3 (
device/lgs_layers.js): fragment merge (owns,supersedes(plain or while a flag is on), fragmentflag, surfaceflag), glass modes fromdata-lgs-glass, plates (data-lgs-plate*), mosaic bands, admission rules 0-7 (profile, covered, click-safe cap snapped to {10, 15, 25} mm, media, destructive, containers only, modal/scroll, 4 depths), lifts by input mode (.gpfocus/.lgs-dwell:hover),hole,tint,slab: "none"(data-lgs-noslab),from/sink,coverDz,window {dim, recede}, v3 acks (both call forms),snapshot/debug/rules. A realstop()leaves no__LGS*global (REQ P1->P6). Phase 1'slayers.jsonobject still works as the whole configuration. theme/layers/00-base.json: main (modes, modal), bar, barpopup, frame.menu, floatingfooter, and C3a'snotifications,volumelevel,tooltipbehind"flag": "wp.c3a"(REQ C3a->P6).99-legacy.json: Phase 1's 14 rules, admission off.theme/layers.jsonis kept unchanged as P8's fallback until99-legacy.jsonis retired (coordinator note; PLAN §6 release step 7).device/rt/08-popups.js(modulepopups, flagwp.p6, off until an area ships a popup fragment that changes something): wrapsSendPendingInstanceParamsToSteamVR/CreatePooledPopup(own properties), per-hostz/zMm/scale/setfromtheme/popups/*.json(rt.data('popups')), restored on removal and by TTL (runtime gone or theme off for 3 s); dead wrappers of an earlier runtime are skipped on restore; follows entry flags (rt.flags.onAny) andgeom(rt.bridge.on) on popups already shown (R1); TTL poll throughrt.setInterval; API returned from install and exposed as__LGS_RT.popups(no global);apply(list)test hook.theme/popups/00-base.json: the six host names, no changes.theme/05-native.css: Phase 1 rules kept for the legacy pops, updated in R1 to today's area paints (main cover::aftersheen off; footer capsule's literal tint → scrim and its host's E3 arc off; Back and tab-arrow raised fill → scrim, highlight off; Home arrows' literal highlight off; Play and the game-page menu button: control rim and sheen off, tint kept); Phase 2 section: main cover zeroes--lgs-mat-window-*and--lgs-edge; other covers zero the card's material tokens; acked plates drop fill, shadow, blur, edge and every material token (REQ C1c->P6); pops (notdata-lgs-noslab) zero material tokens and edge, keep their blur; hosts of popped::before/::afterparts lose their--lgs-edge(R1).- Reporter R1 additions: duplicate ids as flag-aware fallbacks, rule-level
admission: falseignored with an error, rule 2 over every focusable a click in the crop reaches, rule 7 over legacy layers too,hole.fill: "auto"→hole.edgesand literaledges(contract §3.1-§3.5, §4).
Test harness (not in the repo; P6 owns no tools path): p6test.py (rp1, rp2, rp345, rp6, rp7 + rp7check, rpx, rprv, rpperf [--v3first]) and rp8.js, run on the Frame from /tmp/lgs/p6/ with copies of the files under test (/tmp/lgs is RAM: re-create after a reboot; the PC copy is in the session scratchpad, also lost). Pattern, so another agent can rebuild it: install test reporters under __LGS_LAYERS_T* with attrPrefix: "data-lgst" and no binding (Phase 1's reporter from b8fea9a with its globals renamed __LGS_LAYERS_P1*), fixtures in a #lgs-p6-fix container (rule targets pointer-events:auto since R1, so Steam's focusables under them are not counted by rule 2's hit test; the rest none), lab.Lock() (and both=True for systemui reads), flags through __LGS_RT.test.flags.push/pop, input modes through __LGS_RT.test.input.set, cleanup in finally. RP-7's TTL cases load 08-popups.js under a proxy window whose __LGS_RT is a stand-in runtime (define captures the module, data('popups'), a bridge with geom). RP-8 reads window.__LGS_LAYERS afresh each time (P8 re-injects the reporter when anyone syncs a fragment).
Remaining: nothing in the card. Follow-ups for later rounds: delete theme/layers.json and 99-legacy.json when the areas have superseded every legacy rule (who retires which id: contract §3.5); turn wp.p6 on in defaults.json (V1) once an area's popup fragment needs it; when C1a/C2a answer REQ P6->C1a / P6->C2a, drop the matching literal overrides in 05-native.css §1-§3. Open REQs to P6: none (checked 09:23; REQ P9->P6 and REQ P1->P6 done this session). Unverifiable without a wearer: the frame menu's only_visible_with_laser effect (RP-7 proves the request only, PLAUSIBLE: systemui reports the panel property false in every state). Integration with the areas runs live since R1 (p6test.py rpint 09:12 with wp.c1a, wp.c2a, wp.p3 on: Home windowless with 17 plates, 4 automatic mosaic bands and the focused disc popped at 15 mm over its occluder plate; AllGames in window mode with C1a's ornament plate and no legacy footer pop; no errors).
Requests
-
REQ P6->P8: In
inject_reporter, readtheme/layers/*.jsonin name order (skip_wip/; each parsed object with"file": "<name>"added) and pass the list aslayersin__LGS_LAYERS_OPTS; fall back totheme/layers.jsonwhen the folder is missing; re-inject when any fragment changes. The reporter accepts both forms (contractreporter.md§3.1, §9). Pass the report'sprofileon, and the new layer fieldsfrom,sinkto the spec (P7), surfacecoverDz, top-levelwindow(P7window {dim, recede}).- P8 (2026-10-07 04:28): done.
layers=theme/layers/*.jsonin name order withfile(fallbacktheme/layers.json), re-injected whenlgs_layers.js, a fragment or the profile changes; opts carryprofileandgeom {S, r}; v3 acks{key: {cover, pops, plates}}whenstatus().v >= 3; plates,mosaic,hole,tint, slabmaterial(noneonly with the cap),interactive,from,sink, surfacecoverDz,dimand top-levelwindowpassed to glassd.json / the spec (daemon contract §7-9). Live check waits for your reporter v3.
- P8 (2026-10-07 04:28): done.
-
REQ P6->P1: Pass
theme/popups/*.json(name order, skip_wip/, each with"file") to the runtime as data that modules can read, e.g.rt.data('popups')returning the list (contractreporter.md§5.2).device/rt/08-popups.jsreadsrt.data('popups'), thenrt.data.popups, thenwindow.__LGS_POPUPS.- P1 (2026-10-07): done:
rt.data('popups')(a copy) andrt.data.popups: every visibletheme/popups/*.jsonin name order with"file"added; invalid JSON is left out and listed inrt.status().failedLoads. contracts/runtime.md §3.1.
- P1 (2026-10-07): done:
-
REQ P6->C2a: FYI, no action needed unless you want it: your
41-home.jsonnote says a fragment-levelsupersedesis not flag-gated. It is now: give the fragment a top-level"flag": "wp.c2a"(or write entries as{"id": "card", "flag": "wp.c2a"}) and the legacy rules you list (tabs,tab-arrow,cardon Home) drop only whilewp.c2ais on (contract reporter.md §3.1, tested in RP-X). Mark this done or answer here.- C2a (2026-10-07 06:42): thanks;
41-home.jsonnow has the top-level"flag": "wp.c2a". Thesupersedeslist waits for M4:cardandtabsalso serve the library routes, so the ids are chosen together with C2c's40-library.json.
- C2a (2026-10-07 06:42): thanks;
-
REQ P6->C1a: paint the window's top sheen (
%{BasicUiRoot}::after, white .08 → 0), the bottom ornament capsule (#Footer::after, white .12 → .03 over a dark tint) and the Back capsule (--lgs-raised-bg/-shadow) through the--lgs-mat-window-*/--lgs-mat-liquid-*tokens, or key your own native rules on[data-lgs-cover]/[data-lgs-pop~="after"]/[data-lgs-pop~="before"]. Why: literal colours are not reached by05-native.css§4, so in native mode the CSS sheen, tint and E3 arc sat on top of glassd's glass (review R1 M1, doubled edge). Until then05-native.cssoverrides those three paints itself (§1, §2: background none / scrim), so nothing breaks; if you change these selectors or move the ornament to a plate withdata-lgs-nopop(contract §2.1, §3.5), tell P6 so the overrides follow.- C1a answer (2026-10-07, R2 fix pass): the ornament is now a plate, as you asked to be told: T2 node
#Footer > .lgs-orn-plate(data-lgs-nopopalways,data-lgs-plate="liquid"+ idshell-ornamentonly as a capsule); once it is acked,20-shell.css§4c drops#Footer::after's paint and its E3 hook itself. Onwindowlessroutes Back and the search field are plates (shell-back,shell-search) painted through--lgs-mat-plate-bg, which your ack rule clears. The window's top sheen (%{BasicUiRoot}::after) stays literal; your l. 51 rule drops it under the cover. Your stopgaps keyed on the legacyfooter/hdr-backpops only matter withwp.c1aoff (the fragment supersedes those pops).
- C1a answer (2026-10-07, R2 fix pass): the ornament is now a plate, as you asked to be told: T2 node
-
REQ P6->C2a: Home's tab-row arrows (
41-home.cssabout lines 337 and 352) draw their top highlight with a literalinset 0 1.5px 1.5px -1px rgb(255 255 255 / .22)(also!importantunder hover and focus). Please paint it through--lgs-raised-shadow(as the library arrows do) or key a native rule on[data-lgs-pop~="self"]. Why: popped (legacytab-arrow) in native mode it is a second edge inside glassd's crescent (RP-8 R1 paint audit);05-native.css§3 now setsbox-shadow: none !importanton popped Home arrows as a stopgap, so tell P6 if you change that selector.- C2a (2026-10-07, R2 fix pass): done. Both arrow rules (rest, and hover/focus with
!important) now paintvar(--lgs-raised-shadow); no literal inset is left in41-home.css. Also,41-home.jsonnow supersedes the legacytab-arrow(andcard) behindwp.c2a, so withwp.c2aon the Home arrows are not popped at all and your05-native.css§3 stopgap for popped Home arrows no longer applies there (keep or drop it as you like; it still coverswp.c2aoff). Native session 20:00: sgcheck on What's New PASS in both modes.
- C2a (2026-10-07, R2 fix pass): done. Both arrow rules (rest, and hover/focus with
-
REQ P6->P7: restrict the base mosaic to the report's
mosaicbands when present; make a pop's panel interactive only when the layer saysinteractive: true; place plates with the cover (same panel andcoverDz). (Contract §10; filed late, review R1 m10.) P6 (2026-10-07 08:40): closed after readinglgs_sg.js(mosaic bands inmosaic(),interactiveonly in the wearer profile with the layer'sinteractive: true, plates and cover atcoverDz): nothing open; P7 may reopen.
Review R1
| Finding | Disposition | Evidence |
|---|---|---|
| M1 native mode keeps CSS glass on acked elements painted with literals | Fixed. 05-native.css: hosts of popped ::before/::after lose --lgs-edge (generic, §4), plus an id-specific rule for #Footer (C1a sets its edge with an id selector, which outweighs the generic rule: found by the new audit); main cover ::after background: none; #Footer::after literal tint → scrim; Back and tab arrows: --lgs-raised-bg → scrim, --lgs-raised-shadow off; Home arrows' literal highlight off; Play / menu button --lgs-control-rim and --lgs-panel-sheen off (the audit found these on the game page and Home). REQ P6->C1a and P6->C2a filed. RP-8 extended with a computed-paint audit of every tagged element on AllGames, a game page and Home |
RP-8 R1 (09:00): paintClean true; footer --lgs-edge none, ::before none, ::after scrim; native shot footer edge pixel (960, 942) rgb(19, 10, 6) α 123 (was 199, 200, 199 α 196) |
| M2 wrapper ignores flag and geometry changes on shown popups | Fixed. install subscribes rt.flags.onAny (re-send when an entry's flag is among the changed names) and rt.bridge.on('geom') (re-send when S or r changed and a zMm entry exists); resendLive(true) re-sends only popups an entry matches or matched. apply() also uses it |
RP-7 R1 checks flagEntryWaits, flagOnApplies (z 0.07 in the request and systemui 0.0700 within 0.6 s), flagOffRestores (z_pixels 60, systemui 0.09185), zMmFollowsGeom |
| m1 RP-6 pad half flaky | Fixed in the harness: a D-pad move puts focus on the grid first, the measured move goes right, the state is polled up to 1.2 s and must lift the focused poster | RP-6 R1: lift at 0.12 s on the focused poster |
| m2 cost claim depends on run order | Agreed, reworded: same cost as Phase 1. Four runs alternating the order: whoever runs first pays the flush | Cost R1 row |
| m3 no map from legacy ids to areas | Done: contract §3.5 (id, what it pops, who retires it, and how shared ids retire) | contracts/reporter.md §3.5 |
| m4 rule 7 counts only admission pops | Fixed: every kept layer counts; depths only legacy layers use are marked (legacy) |
RP-RV rule7Legacy, RP-X rule7Default (now 5 distinct depths … 0.012 (legacy) …) |
| m5 duplicate ids ignore flags | Fixed: a later rule with a taken id is kept as a fallback when every earlier one is conditional (flag, fragment flag, flagged supersede, profile), and applies only while none of them is live; an unconditional duplicate is still skipped with an error | RP-RV dupFallbackRules, dupFlagOff, dupFlagOn, dupUnconditional |
m6 rule-level admission: false bypass |
Fixed: ignored outside an admission-off fragment, named in errors |
RP-RV admissionFalseIgnored (the rule is then dropped by rule 2, s = 40) |
| m7 rule 2 counts only focusables inside | Fixed: every focusable that intersects the crop by ≥ 8 × 8 counts: the element, descendants, ancestors, and other elements where a click at the middle of their part of the crop reaches them (hit test; one hidden under the popped element is not a target) | RP-RV rule2Neighbour (outset over a 40 px neighbour: dropped s=40; same without outset: kept at 15 mm); RP-3 still 10 mm capped |
| m8 RP-7 frame-menu check reads back the request | Agreed: the frame-menu flag's effect is PLAUSIBLE (needs a wearer); systemui reports only-visible-with-laser false in every state again (sgPre, sgApplied). zMm/space is now exercised live |
RP-7 R1 zMmMain (zMm 20, space main, S .369, r .8 → 0.06775 in request and systemui), zMmFollowsGeom (r → 1: 0.0542) |
| m9 runtime-contract hygiene | Fixed: rt.setInterval for the TTL (window timer only without a runtime), API via rt.expose('popups') / rt.use('popups') (no __LGS_POPUPS_API), nothing defined at load time without a runtime (MOD.test for stand-in runtimes), restored() drops an offset Steam never sent |
RP-7 R1 noGlobal, installedWrapped (through __LGS_RT.popups), TTL cases through a stand-in runtime |
| m10 log precision | Fixed: R0 times below corrected to the result files' mtimes; P7 request filed (closed: lgs_sg.js already does it); the C1c REQ answer shortened to one line; RP-5's media case stays a <video> fixture (disclosed) |
this file |
Evidence
Steam build 11094443 for every row (PLAN §7 rule 7; same build as P10's rows of the same hour). Result files on the Frame in /tmp/lgs/p6/ (RAM, gone at reboot; no camera data, no names).
| Test | Command | Result | JSON | Date |
|---|---|---|---|---|
| S4 RP-MO (new: REQ C2a->P8 #17, REQ C4b->P6) | cd /tmp/lgs/p6 && python3 -B p6test.py rpmo --out rpmo.json (lab lock; /library/tab/AllGames; reporter under __LGS_LAYERS_T2/T3/T4 with 00-base + 99-legacy, plus an owner fragment "scaleFrom": "overlay" (T3) and one with "sideways" (T4); fixture: 6 capsule plates in two rows and two data-lgs-mosaic bands; data-lgs-glass set to none, window, window-full, hero, windowless, then the bands removed) |
PASS 7/7: with a cover (window, window-full, hero, and no attribute) mosaic absent; windowless gives the two explicit bands {0, 294, 1920, 192}, {0, 624, 1920, 192}; without the band elements the automatic bands ({148, 298, 784, 184}, {1048, 628, 784, 184}, plus one for C1a's live ornament plate); scaleFrom "overlay" from the owner, absent by default, "sideways" refused with main.scaleFrom: "main" or "overlay" in errors; cleanup: fixture removed, glass restored. (First run 13:23 failed only on the test's own count of automatic bands: C1a's live ornament plate adds one; expectation fixed) |
rpmo.json |
2026-10-07 13:24 |
| S4 RP-1 re-run | p6test.py rp1 --flags wp.c1a=false --out rp1.json (the harness now takes step options; RP-1 needs no area T2, and a session override in /tmp/lgs/flags.json keeps wp.c1a on) |
PASS: Home, AllGames, AllGames + D-pad, game page: sameFragments and sameLegacyObject true, no diff. (A 13:29 run without the flag failed on C1a's live data-lgs-glass and ornament plate, i.e. on the environment, not on the reporter) |
rp1.json |
2026-10-07 13:43 |
| S4 RP-2 re-run | p6test.py rp2 --flags wp.c1a=false --out rp2.json (plate checks count only the fixture's fx-* plates) |
PASS: 20 plates, materials and rects exact; window 1920 × 984 r 81, window-full 1920 × 1080; windowless shapes: [] and the 4 automatic bands |
rp2.json |
2026-10-07 13:45 |
| S4 RP-X re-run | p6test.py rpx --out rpx.json (its mosaic check now expects no bands: the fixture sets window mode, which has a cover) |
PASS 18/18 | rpx.json |
2026-10-07 13:29 |
| M RP-CC (REQ C3b->P6, new) | python3 -B /tmp/lgs/maint/p6cc.py on the Frame (lab lock; on /library/tab/AllGames: reporter v3 under __LGS_LAYERS_T5 with the new 00-base.json and under __LGS_LAYERS_T6 with the old one, each with a test fragment (t-flat, 10 mm; t-modal, modal: true) and 99-legacy; fixtures pointer-events:none: two panel plates, t-flat on one of them, and a transparent 1280 × 720 div.lgs-cc standing in for CC-M's root; then data-lgs-glass set to windowless (CC-M's real state) and restored; route restored, fixtures and test globals removed and checked) |
PASS (11 checks): CC-M closed: t-flat pops; CC-M open: t-flat dropped rule6-modal in window and in windowless mode with the new base, kept by the old base in both (the bug); a menu-like modal: true rule still pops over CC-M; with CC-M open and windowless no legacy main pop (legacy rules are admission-off: "outside the cover"; in window mode the legacy hdr-back, footer, tab-arrow, card stay, recorded); t-flat back once CC-M closes; no error but rule 7's legacy depth warning; nothing left (0 marked elements, no test global). The first two runs: one tested nothing (a visible modal: true match counts as an open modal, so the fixture for it is now added only while CC-M is open), one waited out the lab lock (240 s) |
p6cc.out (scratchpad maint/) |
2026-10-07 11:08 |
| R1 RP-RV (new) | p6test.py rprv (fragment 47-p6rv.json between 00-base and 99-legacy: card (legacy id) behind flag p6DupFlag, play (legacy id) unconditional, rv-adm with rule-level admission: false over 40 px buttons, rv-nb (decorative 100 px crop, outset 12 over a 40 px neighbour button) and rv-nb0 (no outset), rv-hole (hole: {fill: "auto", shadow: .3}, slab: none) over a 300 × 200 <img> (red left half, blue right) under a black 0 → .5 gradient, rv-edges with literal edges and one bad side; instances with p6DupFlag off and on; a D-pad move so legacy pops show) |
PASS (9 checks): fallback rules [47-p6rv off, 99-legacy on] / [on, off], the area card at the fixture only with the flag (legacy skipped "id taken by 47-p6rv.json (live)"), no duplicate error for card, main.play: duplicate id (99-legacy.json), skipped; rv-adm error and dropped rule2-click-safe s=40; rv-nb dropped s=40, rv-nb0 at 0.0407; rule 7 main: 5 distinct depths (max 4): 0, 0.012 (legacy), 0.015 (legacy), 0.0271, 0.0407; hole edges top [171,34,34 ×2, 34,34,171 ×2], bottom [130,26,26 ×2, 26,26,130 ×2] (the gradient deepens), left reddish and right bluish lists of 3, no fill; literal edges passed, right: 42 named in errors (08:28; again at 09:19 after REQ P1->P6) |
rprv.json |
2026-10-07 09:19 |
| R1 Integration (areas live) | p6test.py rpint (lab lock; wp.c1a, wp.c2a, wp.p3 pushed through rt.test.flags for the step; reporter v3 under a test global with the live fragments 00-base, 20-shell, 21-search, 31-cc, 40-library, 41-home, 99-legacy; Home and AllGames, each at rest and after a D-pad move) |
Works with the areas' real DOM. Home: data-lgs-glass="windowless" → mode: windowless, no cover shape, 17 plates (C1a's Back, search, segmented control and What's New capsules; C2a's 13 discs, ids from data-lgs-plate-id), 4 mosaic bands built from the plate rows; after the move the focused disc pops as C2a's home-disc at 0.0407 (15 mm) and its plate (grown to 198 px with the focus scale) is occluder. AllGames: window mode, C1a's ornament as a plate (shell-ornament 920 × 126 r 63), legacy tab-arrow ×2 and card pops, no legacy footer (C1a supersedes it); errors empty on every state |
rpint.json |
2026-10-07 09:12 |
| R1 RP-1 | p6test.py rp1 |
PASS: byte-identical surfaces with Phase 1 on the four states, both forms (08:33; again at 09:18 after REQ P1->P6) | rp1.json |
2026-10-07 09:18 |
| R1 RP-3/4/5 | p6test.py rp345 (fixture rule targets now hit-testable) |
PASS all three, values as before (t-cap 0.0271 capped, want 0.081; t-cap40 dropped s=40; t-int wearer 0.0678 interactive; destructive and media dropped). The first R1 run failed RP-3/4 (s = 32/34 from Steam's tab buttons under the pointer-events:none fixtures): that led to rule 2's hit test (m7 row). Passed again at 09:18 after REQ P1->P6 |
rp345.json |
2026-10-07 09:18 |
| R1 RP-X | p6test.py rpx |
PASS (18 checks). 08:31: rule7Default gave main: 5 distinct depths (max 4): 0, 0.012 (legacy), 0.0271, 0.0407, 0.0678 (the four area depths alone pass; the legacy tab-arrow makes five). 09:19 run failed only because C1a's new header layout put the tab arrows under two hit-testable fixtures (legacy tab-arrow: covered); the check now reads the rule's debug trace (evaluated with p6TestFlag off, "superseded while p6TestFlag is on" with it on) and expects the rule 7 warning only when the legacy arrows show; 09:22 PASS |
rpx.json |
2026-10-07 09:22 |
| R1 RP-6 | p6test.py rp6 (pad half: focus to the grid with one move, then the measured move right, state polled ≤ 1.2 s) |
PASS: pad lift on the focused poster at 0.12 s; laser lift after dwell; sweep 19 samples, 0 lifts, 0 early dwell; rest lift (dz 0.0407) | rp6.json |
2026-10-07 08:31 |
| R1 RP-7 | p6test.py rp7 (A as before through __LGS_RT.popups; (C) apply([00-base, {p6flag: z 0.07, flag p6RevFlag}]) while the test popup stays shown, then p6RevFlag pushed and popped through rt.test.flags; (D) the TTL "runtime gone" copy runs a zMm: 20, space: main entry under a stand-in runtime with geom S .369 r .8, then geom r 1 through its bridge listener) |
PASS (20 checks): (A) z 0.05 / scale 1.25 in the request and systemui (0.0500, mpp ×1.25), frame-menu request flag false then restored (effect PLAUSIBLE, m8); (C) entry off: request untouched (z_pixels 60) and the frame menu restored since its entry left the config; flag on: z_meters 0.07, systemui 0.0700 within 0.6 s (flagResends 1); flag off: z_pixels 60, systemui 0.09185 within 0.6 s; (D) 0.06775 in the request and systemui, then 0.0542 after the geom change (geomResends 1); TTL restored both cases; no __LGS_POPUPS* global at any step; host pools unchanged |
rp7.json |
2026-10-07 08:31 |
| R1 RP-8 | python glass.py native-session --step "eval SharedJSContext @/tmp/lgs/p6/rp8.js" --step "js \"(async () => JSON.stringify(await __LGS_P6_RP8()))()\"" --step "eval SharedJSContext \"delete window.__LGS_P6_RP8; 1\"" (real glassd; fragments live then: 00-base, 20-shell, 21-search, 31-cc, 41-home, 99-legacy; paint audit after acks and settled transitions on AllGames, /library/app/735580, Home) |
PASS (10 checks): the 8 earlier checks (plates acked in 600 ms, fill transparent, shadow none; cover dropped incl. ::after none; tagged ≤ acked) plus paintClean (19 tagged elements on 3 routes: no E3 arc, light gradient, light inset edge or cover tint) and footerAudited. Notes only: the tab-row tracks keep a dark recessed inset shade (a control track, not glass). Earlier R1 runs failed and drove the fixes: 08:36 (footer arc: C1a's id selector; Play / menu-button control rim; Home arrows' raised fill), 08:46 (Home arrows' literal highlight), 08:55 (harness: a re-injected reporter). 09:25: PASS again (10 checks, 19 tagged elements, plates acked in 600 ms) with the final reporter (REQ P1->P6) and 40-library live |
stdout scratchpad/p6/rp8_r1e.txt, rp8_r1f.txt (not kept); shots shots/p2_p6_r1_native_{allgames,app,home}.png (08:46) |
2026-10-07 09:00, 09:25 |
| R1 native look | the 08:46 shots composited over a glass tone rgb(62 66 78), next to the reviewer's p2_p6_rev_native_allgames.png |
The footer capsule's white top line and E3 marks are gone: pixel (960, 942) rgb(19, 10, 6) α 123 (was 199, 200, 199 α 196); the capsule is a frosted scrim over which glassd draws the glass; Back is a scrim capsule; the window shows no CSS sheen. Overlaps in the AllGames header and an "Alphabetical / Filter" row over the ornament come from area CSS in progress (also in CSS-only mode), not P6 | shots/p2_p6_r1_native_allgames.png |
2026-10-07 08:50 |
| R1 Cost | p6test.py rpperf ×2 and p6test.py rpperf --v3first ×2 (live fragments incl. the areas' 20-shell, 21-search, 31-cc, 41-home, then 40-library) |
Same cost as Phase 1. Phase 1 first: v3 2.23 / 2.42 ms against Phase 1 4.12 / 3.29 ms; v3 first: v3 2.75 / 3.36 ms against Phase 1 2.11 / 1.88 ms. Mean of the four: v3 2.69 ms, Phase 1 2.85 ms per sample; snapshot() 0.70-0.78 ms both |
rpperf_{a,b,c,d}.json |
2026-10-07 09:02-09:08 |
| R1 G-REMOVE (P6 part) | python glass.py js after the 09:00 native session |
PASS for P6: no __LGS_POPUPS* or __LGS_P6* global, no __LGS_RT.popups (module off), no own method on vrPooledPopupStore, no fixture or data-lgst-* attribute, no test flag left. Native-mode attributes and __LGS_LAYERS were present because another agent's native session started at 09:00:37 (/dev/shm/lgs/shell.json). After the 09:25 session: no __LGS_LAYERS*/__LGS_POPUPS*/__LGS_P6* global, no data-lgs-cover/-pop/-plate-ack/-noslab or data-lgst-* attribute and no lgs-native on any window, no own method on the store, no test flag; theme on (CSS only) |
stdout | 2026-10-07 09:01, 09:26 |
| RP-1 | cd /tmp/lgs/p6 && python3 p6test.py rp1 --out rp1.json (one lab lock: Phase 1's reporter from b8fea9a as __LGS_LAYERS_P1 with theme/layers.json; reporter v3 as __LGS_LAYERS_T2 with [00-base.json, 99-legacy.json] and as __LGS_LAYERS_T3 with the Phase 1 object; snapshot().surfaces compared as JSON text) |
PASS: byte-identical surfaces on /library/home, /library/tab/AllGames, AllGames after L.pad('down') (focused card) and /library/app/735580 (6 surfaces each; main pops e.g. hdr-back@0.015 tabs@0.012 tab-arrow card@0.008, game page play@0.02 app-button); v3, profile default, geom from P8's bridge {S: 0.369, r: 1}; no errors |
rp1.json |
2026-10-07 05:57 (file overwritten by the 06:29 re-run) |
| RP-2 | p6test.py rp2 (20 fixed div[data-lgs-plate] in main, 5 × 4 materials window/panel/liquid/thick, 200 × 110 CSS px, r 24; one with phase .5, materialize, tint, fill; then data-lgs-glass = window, window-full, windowless on %{BasicUiRoot}, restored) |
PASS: 20 plates, ids, materials and rects exact in texture px (e.g. fx-0-0 60, 60, 300 × 165, r 36); window mode cover 1920 × 984 r 81, window-full 1920 × 1080; windowless: shapes: [], 20 plates, 4 mosaic bands (one per row, +2 px) |
rp2.json |
2026-10-07 05:58 |
| RP-3 | p6test.py rp345 (test fragment 50-p6test.json between 00-base and 99-legacy: t-cap dz 0.081 over five 72 px buttons, t-cap40 over 40 px buttons; geom S .369, r 1) |
PASS: t-cap reported dz 0.0271 (10 mm) with capped: true, want: 0.081; t-cap40 dropped rule2-click-safe s=40 cap=0.0208 |
rp345.json |
2026-10-07 06:00 |
| RP-4 | same run (instances with profile default and wearer; and the real flag path __LGS_RT.test.flags.with({interactivePops: true})) |
PASS: default: every layer interactive: false; wearer: only t-int (interactive: true, wearer depth 25 mm = 0.0678, click-safe cap skipped) is interactive; legacy layers carry no interactive; flag path: profile default → wearer during → default after |
rp345.json |
2026-10-07 06:00 |
| RP-5 | same run (Steam's own CONFIRM dialog with no-op handlers, then its OK button tagged data-lgs-destructive, both profiles; a <video> fixture under t-media; dialog closed, never confirmed) |
PASS: plain CONFIRM: only the modal rule pops (others rule6-modal); destructive: no pop in either profile (rule4-destructive); media: rule3-media. The media route case is the <video> mechanism (any video or [data-lgs-media]), not a real trailer route |
rp345.json |
2026-10-07 06:00 |
| RP-6 | p6test.py rp6 (test rule t-card when: attended, 15 mm, on %{LibraryItemBox}; wp.p3 on for the step through rt.test.flags.push; rt.test.input.set('pad') + L.pad('down'); rt.test.input.set('laser') + CDP mouseMoved onto a poster for 350 ms; a CDP sweep over 5 posters at 45 ms each recorded in the page every 12 ms; pointer to (1400, 900) after) |
PASS: pad: card on the focused poster (dz 0.0407 = 15 mm); laser: card on the hovered poster after dwell (.lgs-dwell set); sweep: 14 samples, 0 lifts, 0 dwell under 80 ms; at rest on the last poster the card lifts |
rp6.json |
2026-10-07 06:00 |
| RP-7 | p6test.py rp7 + p6test.py rp7check rp7.json (lab.lock + lab-vr.lock. (A) wp.p6 on through rt.test.flags.push; a test popup in the idle barpopup host by the SP E2 method (parent main, z 40 px, non-interactive); __LGS_POPUPS_API.apply([00-base, test fragment]): host p6test (contentSel #lgs-p6-orn, z 0.05, scale 1.25) and frame.menu (owns, set only_visible_with_laser: false); flag off. (B) TTL: a second copy of the module under a proxy window with a fake runtime, then the fake runtime replaced (runtime gone), then the fake theme off) |
PASS (13 checks): request z_meters 0.05, z_pixels 0, scale 1.25; systemui panel translation z 0.0500 (was 0.0919 = 60 px × Mp) and meters-per-pixel ×1.250; frame menu request only_visible_with_laser false; after removal no own methods on the store, Steam's request (z_pixels 60) and the scene graph back, frame-menu flag back; TTL restored both cases within 4.5 s; host pools identical before and after. Note: systemui's panel property only-visible-with-laser reads false for the frame menu even while Steam requests true, so the flag is checked on the request |
rp7.json |
2026-10-07 06:03 |
| RP-8 | python glass.py native-session --step "eval SharedJSContext @/tmp/lgs/p6/rp8.js" --step "js \"<run __LGS_P6_RP8 once>\"" ×3 (lock retries) --step "eval SharedJSContext \"delete ...\"" (real glassd and daemon, reporter v3 injected by P8 with 00-base, 41-home, 99-legacy; on /library/tab/AllGames: two data-lgs-plate="panel" fixtures, one painted by a class rule (fill + shadow), one inline through --lgs-plate-bg) |
PASS (8 checks): native on main; reporter v3 in ack mode; both plates keep their CSS fill before the ack, acked after 600 ms ({cover: true, pops: [card, footer, hdr-back, tab-arrow], plates: [p6-rp8, p6-rp8b]}), then fill transparent and shadow none; main cover tagged and its background transparent (--lgs-mat-window-bg transparent, --lgs-edge none); tagged pops ≤ acked pops (4 = 4), tagged plates = acked plates; after removal no plate in the report and no fixture left; back to CSS only: yes. First run (06:10) failed only because its fixture painted inline (inline beats the stylesheet; areas paint plates through rules or --lgs-plate-bg): the fixture was fixed, not the CSS |
stdout (%TEMP%/rp8_out2.txt on the PC, not kept); shots/p2_p6_rp8_native.png (Steam's texture in native mode: window glass gone, capsules keep a light scrim; composited over a glass tone it is clean, the faint halos in a raw viewer are alpha ≤ 5 %) and shots/p2_p6_rp8_css.png (CSS only, same route) |
2026-10-07 06:17 |
| G-REMOVE (P6 part) | python glass.py js "({g: Object.keys(window).filter(k => /^__LGS_LAYERS|__LGS_POPUPS|__LGS_P6/.test(k)), attrs: ..., own: Object.getOwnPropertyNames(vrPooledPopupStore)...})" after the native session went back to CSS only |
PASS: no __LGS_LAYERS*, __LGS_POPUPS* or test global (the Phase 1 leftovers __LGS_LAYERS_NAVMOD, _LAST, T2_LAST are gone), no data-lgs-cover/-pop/-plate-ack/-noslab attribute in main, no own method on vrPooledPopupStore, lgs-native off |
stdout | 2026-10-07 06:20 |
| RP-8 re-run | same command after adding the material tokens and blur tokens to the acked-plate rule (REQ C1c->P6), files synced | PASS (8 checks), plates acked in 700 ms, fill transparent, shadow none; back to CSS only: yes |
stdout | 2026-10-07 06:24 |
| RP-X re-run, RP-1 re-run | p6test.py rpx, p6test.py rp1 after adding fragment-level flag and flagged supersedes (fixture fragment 45-flagged.json: flag: p6TestFlag, supersedes: ["tab-arrow", {"id": "card", "flag": "p6Other"}], one rule) |
PASS (RP-X 18 checks: the 15 below plus legacy tab-arrow reported with the flag off and gone with it on, card kept with unless: p6Other, the fragment's own rule only with its flag, and data-lgs-noslab=self on the slab: none pop only ); RP-1 still byte-identical on all four states |
rpx.json, rp1.json |
2026-10-07 06:32 (rpx), 06:29 (rp1) |
| RP-X (rest of the card) | p6test.py rpx (fragments 00-base, 20-owner (owns main: window mode h 600 r 40, coverMm −10), 30-intruder (changes main's material without owns), 50-p6x (supersedes hdr-back, main.footer; rules with hole {fill: scrim, shadow}, tint green and auto, slab: none, from: cut / fromMm, sink: false, exclude, a rule flag, wearer depths 30 and 50 mm), 99-legacy; fixtures: 7 rule targets, two plates under pops (one occluder="false"), two data-lgs-mosaic bands, 34 more plates; data-lgs-window-dim="0.6" on main's <html>; instances in default profile and in wearer profile with the flags p6TestFlag and wp.c3a) |
PASS (15 checks): owner's mode shape 1920 × 900 r 60 and coverDz −0.0271; intruder ignored with an error; both legacy rules superseded; hole {shadow: .35, fill: rgba(0, 0, 0, .35)}, tint rgb(48 209 88), material: none, from: cut, sink: false; auto tint rgb(48 120 230), from 0.0136; excluded target dropped; the flagged rule only with its flag; C3a's notifications, volumelevel, tooltip surfaces only with wp.c3a; plate under a pop occluder: true, the opted-out one not; 32 plates + 4 "dropped (more than 32)" errors; explicit mosaic bands in texture px; window: {dim: 0.6}; rule 7: no warning in the default profile (4 depths), "6 distinct depths (max 4)" in the wearer profile; wearer pops interactive only in the wearer profile |
rpx.json |
2026-10-07 06:20 (overwritten 06:32) |
| Cost | p6test.py rpperf (Phase 1's reporter and reporter v3 with the live fragments 00-base, 41-home, 99-legacy side by side: AllGames, 7 D-pad moves, Home, a game page) |
v3 2.0 ms per sample against Phase 1's 3.55 ms in the same ticks, but Phase 1 was injected first and pays each tick's layout flush (review m2): read it as the same cost as Phase 1 (R1 row below) | rpperf.json |
2026-10-07 06:22 |