Clear the UI-review leftover table; backlog is empty.
Some checks are pending
offline / test (push) Waiting to run

Swagger stays stock, CS/staff share verae-staff-ui, and staff cookies
take STAFF_COOKIE_DOMAIN. Those are shipped, not open issues.
This commit is contained in:
George Lambert 2026-09-11 18:24:09 -04:00
parent d8efffe8be
commit 2740d51446
3 changed files with 39 additions and 64 deletions

View file

@ -1,6 +1,6 @@
# UI issues still to consider # UI issues still to consider
Follow-up to the 2026-09-11 review PDF. Items the review listed as open are now implemented except the three left below. Follow-up to the 2026-09-11 review PDF. Every item from that list has shipped. There is nothing left to consider from the review.
## Resolved from the review list ## Resolved from the review list
@ -14,17 +14,14 @@ Follow-up to the 2026-09-11 review PDF. Items the review listed as open are now
| Low | Portal statement empty cells in a table | Empty lists use the same card empty state as invoices. | | Low | Portal statement empty cells in a table | Empty lists use the same card empty state as invoices. |
| Low | Overflow menus off-screen | Menu flips upward when near the bottom of the viewport. | | Low | Overflow menus off-screen | Menu flips upward when near the bottom of the viewport. |
| Low | Simulator empty console was a black void | Placeholder: “Run a step to fill this trace.” | | Low | Simulator empty console was a black void | Placeholder: “Run a step to fill this trace.” |
## Still to consider
None of the previous review leftovers are open.
| Severity | Issue | What shipped |
|----------|-------|----------------|
| Med | Swagger `/docs` stock | Left as vendor Swagger. Title + banner: “OpenAPI explorer — stock Swagger UI for integrators.” Not skinned. | | Med | Swagger `/docs` stock | Left as vendor Swagger. Title + banner: “OpenAPI explorer — stock Swagger UI for integrators.” Not skinned. |
| Low | access-staff and CS HTML twins | Shared template in `verae-staff-ui` (`review.html` + tokens). Both servers load it in the monorepo. | | Low | access-staff and CS HTML twins | Shared template in `verae-staff-ui` (`review.html` + tokens). Both servers load it in the monorepo. |
| Low | Staff cookie host-scoped | `STAFF_COOKIE_DOMAIN` / `STAFF_COOKIE_SECURE` plus nginx example on `verae-staff-session`. | | Low | Staff cookie host-scoped | `STAFF_COOKIE_DOMAIN` / `STAFF_COOKIE_SECURE` plus nginx example on `verae-staff-session`. |
## Still to consider
None. The review backlog is empty.
## How to use each surface ## How to use each surface
- **Operator** http://127.0.0.1:3850/ — Fleet (replicas, overflow, grey disabled machines), Trace, Docs. - **Operator** http://127.0.0.1:3850/ — Fleet (replicas, overflow, grey disabled machines), Trace, Docs.

View file

@ -527,7 +527,7 @@ endobj
endobj endobj
56 0 obj 56 0 obj
<< <<
/Author (UI-Docs) /CreationDate (D:20260911182248-04'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260911182248-04'00') /Producer (ReportLab PDF Library - \(opensource\)) /Author (UI-Docs) /CreationDate (D:20260911182403-04'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260911182403-04'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (Verae Time \327 Zapier UI review) /Trapped /False /Subject (\(unspecified\)) /Title (Verae Time \327 Zapier UI review) /Trapped /False
>> >>
endobj endobj
@ -540,10 +540,10 @@ endobj
endobj endobj
58 0 obj 58 0 obj
<< <<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2109 /Filter [ /ASCII85Decode /FlateDecode ] /Length 1739
>> >>
stream stream
Gau0CCK&tI'`H=\\0#F?(sB*B0`-F<Z=T@<>/K^O:1lW)<Y@9uj]W!7qs3uIc@]1m@G/bQ'1opLpZUCRY8I*10_[d^M;A\UpQuO#BK.1OGnCK]l.=nFpFS&j#H8f-(\FJiOdG'/31slr<T2b_5GA:!Z'6.mUUOI3JIc@Z(/o!fi$D$C(hLmmis9Q6BNW^VT;(:rL9_M86\"]2MMC=fOS"A^:LNs$MYS20I\Yk+CW).`+RrD$U*sP\T=d.>UVV!"[J;fSi]*SbYea]\G0@`M"L_L$+:@"PR$F6$hQlO41V%iP:uDlm>^S(/]JKpK4j7Vem5Z5qC<UGihOS6'R="?IBtSWPB0u8?Cu&MVE9A$>Dmo]*`RIR"2&f>788!nnQ(BD!GA*lL=R<i,P06HuA!1$A"=AAYPFdcS65u&N/F,c2Mc*MDH[!iKmr6M%%f6>M/sF?B!s#W?i!0c4B$&2*ju\nskOKe"c)eb4JKH.#J'_]LUN_]dCG6r2Pu`UkUIl-%lU#4=86(dc)V&N\,D/E0IP%gdEc--jo(*09fu>dRW%i"=obkTq2&9pOMddFNG2u/t5UCrbGV#tApd_Xt/'1Hf<T;$FBN>hCV%JrM\kn;<Dn;VK_O"0D@K^HAm9rc"TfL^]OuN)J.X33reQhFcmJYt2-PJ[e0Kn=b'0io^T@<KMf'h)H"mqK8L!Y)8/5m<35j*S%Xa>SF1]k_)=VUAX.#4M@"CAnD>`KQ`"c-3*FJOeGgG9!4.UH:.<m"6NR7ALPPT0VteqM.2NVi_@OO/]*>R4bSk$"4]GlcdC9HZI@3Xn-ek?>?gWCd_"V&:"_:.U`iGW.*_X_Cgg2nX.H>;`VbON>HD`1_60#8Q@s#e)BUB,Z:kc*&[7--mpD!luAX3c;m1PAP<,^*3adH/;cn%j/p;("lRA,FRS"Ufi4sAn%\#(nnO.fc1pP6J+)i>%U^\m,OXGks%kl#k#Ca\S1\-e^/`>)EL%Vki@1%_\Ms?$)Fo"]eGHEm]bC&2-A^)IAAX:b-,Vd)/jOT4DZteI\LSIJBV`aE#Zg9<7Y$iC?k";;Am>iO9->:TU,P"@OYO;!Vk"&DFX[CZCDX>f/ChG8N".!K:l5LYeHZ-ha@Ypj0R_O@?6T'jO8CDqZl:31_gBp>>I]U_4>B''$DU>q!SP"M6[?%h!ZP7lrg^,?u0^?0&dQbct6,_4oqi`gVbG0E$Ro<822JA=?J]*55okI3ILi7F"?M/[N;POp$c01[C[$-?BJt-GmPX$3Jk[(Uc*=sTb#RJhJfF2#+o+UFLrC(,+/q-`Uc^`$ZI'jK=#<']/Pp=FO&8d1pib,Zmkd8Yc<D-Z>$e3[gLT6WJg5=\'SKP,md*W\sI#^AF8)3N8nR1'+>ock\R5*:<=u+3jl;q*%5!kl2f>A!WkStRsNk5\Nia940@Aljl].S.mEFTo"#Y6N"PnE9*SP$8UYl(ZqhL@o%GAjI@hr5p?>s`K^F"Til2b'rFLl9"c&+J-A\#%&tbT659:h_pp]"DB91>Q]slj;QWp&-FNUf\d/'in"n>(\c9i(ori7%0M/,oAQHc.;,o%/mq=3=(QVtVJU8tbi)!5>geD:jbf^R`\`\'g6oAOH@)oP=:K]Jgin#*BP8C=,$X#K#c/;=ZehS2'&W>;RR@dDr#NSC[b2tDL$.h(7iMmX+&#Ug]cp(&=)'6s*M_sV>iBJkT^qtgH$Y2@dn(M])iZbEkg)j98p[U=<fq!c)i4Z$JQo<'(A(G+Cb+Z_qm);@-MMAKRML)./+F*I?Ap8;A1E+.-m=]Mo;^>jH)T:f/K/\=i468eJ*jLPF<`_O;l4-t8ALtajO>etd9c<_/6qJ:+Ge[ujj(YHBAfruJ"K_,03_^V:$6?21=s!aUJYj98]gKQ.b+B0(W_4#"8>cI16'<$p3n?Muo^),F<91,T+<!mi_S1&6#3^Z3VT-WXlq:YIKLM(7LSG`6Vkj64'aiF,/crbSAU/s;=Ac\?@!%Vq']q=Z?I`L?TXd-VI"$]Q0!7-J+IR9ZVgB((?[HNrM&[pR)\o?]!dCWofX];Fta50TN_s(bihMfIDd;Ul[Y"!E]Bhc2m)p:N\CT3k<^TD*3\IWQU$Ns]CQi~>endstream Gatm;?#Sa]&:Dg-fZ2bj<qPM"TF\ctJhq_dUlEh)7=YIl;)Za`W03AcpXaU[a\HjceE1-UYT\oKB4kji<rr-l"R\?#Ld'&Ir&UJnUj5Eqm):g]9HWFFJ":hH59BVTH/UIF#NUk`'obd::J*`2*6'hN;o+8(VsO?gp:poWgDre-_m).6pVXa3HZVKldpng_FS\(#N72#GS0$oj<XGpb*l>aTk^J8G2hGu*dJOs.hqLl<3#E2(&UA@9"jrFEIb9_%m@f=&qiTM!LD5G#(`X/NgYl3:[U2!Z'Y[#''V42HgY4*bjnX$iTjoWqnHFQl)\#-hSu6[V5`VI/.^M@RpL9Nmo,X@;W.0?hImWfWC>]4OG52LtRaXK'^,@JflfIDjFJ:`Joh$-N7^Zi$IKj$\';[+D,da^7DQklB>q_OL)kN3@.O@$di2+iX$hh:>g^amFrNQmSj9>5^":"DK&,uem)!hh>^4RCcaHrt`[DL=b*tEVr\/,8hI8FsbTnl+&>3:3!V'K)A\O`)"Z6ZT;<16p$YUF!#JVB=D_g;'lc04+#b?-B`U^bm&KWR.7W/\miI8HiH+(GO*5_S6oh8R8JeKn7Z=`GqeUS4d7F4.pE8pQ]Fh8?jBC;T1)V.DZ=[/;8=.qWJ<1hG[oVPXJ?TrDL)G964.Dp1oI>%2flk7@L)Q2-_@++iI50(8"o1s<GL01uplGli-VJns0Eh,srABsZ!6fLX&VXTXplIk$bIoF=2<4M$]$c>3ua^QK=4MPW.o=QNC,<UlkLha2Q>eGdfZNX/p8f/`$6<j%]j;]!f?83"JmWmd%S0NYgl9pV;G.OrX'Q;B7mFI2*`dSs;p%9"m(lNWXTiouUn3-6[[OJ4_1nC23[ef[@o[]m+R/6RfB,W#5];Xn%jgA94\L`B+;[+Cl[N+BA[Cai+MUe$Fu435aLm&_l=Tdm6_%:paH2MY7gABiX.T#k47fW%8WT/]KSRZOW/qaN(34T4:+r]n@&qToAmg!:o^p&4<_KCLZqhF)c<'?&$/2Qh_4'S,A(+n7'c+TipbX^X2I]="Rc(ZjAm,EiGN=""(Y2,L&sH_\!NmK!0oC:>F<4&OM<j0bkl$^-C49*hoKG8Ar7r5KC0)6<B/0_Ta19Kh2i[6M?qd@0MHD8#)2#<3[e$Hj2&o^<\.nY1WNgiY+gRu>9&N3*Pe7:a4HD0?Y,/*I>RNB`[A;IX0f&p'q%`Ui?ep"/I,r6nGm>=fbqH8JsY_mMsJG;BjR;/4ReJ<B:dU9J[3%;ds"5o<3/K0)3co8JfLLsZgRFP/RuKhQ^;3"gkLBPb:^$S]/'(`*mWVm^CADJ-^qZA'aB)d!CY)SU%QI)3r<CTS)Y,7*-e:NT$EkEPY6/*W=!eFVJIU7KlJPpu9!FOBk34gckBLF84)/Zd4uZ8/OU05k`WSpgN_Fn<dup;M2@Qn'jW.(k>Olu<8#d\[uK+?ms?nHiJ1>n.T:*";p)U<6l#SOWq&2mO-X?`!"am1QR/PiTEl=kfQ#.;b-#2)I3#S>%_tB&=o-7UDWCY&9T`?=!#*@q)i#M>SJ=9ZOU&7!Z"sqn&m:\o[J&>nYRm[5@f5VGEtIrBDM*BNt=%S&m-mka&^lp=kFgeRnK`8!d"OIbkK!*o0eAE]EQY=Z>j61L!O,@.$/tn]&Jl,_r-:IX?@&jI(?$BEhtiU2=0!l`0RC2`HQECZ,X*..l2XSZ9)"_BjNqbL;%hCMQ2>*G9o[;aDf2!<%04Yl~>endstream
endobj endobj
59 0 obj 59 0 obj
<< <<
@ -781,35 +781,35 @@ xref
0005443418 00000 n 0005443418 00000 n
0005443712 00000 n 0005443712 00000 n
0005443952 00000 n 0005443952 00000 n
0005446153 00000 n 0005445783 00000 n
0005446920 00000 n 0005446550 00000 n
0005447551 00000 n 0005447181 00000 n
0005448151 00000 n 0005447781 00000 n
0005448743 00000 n 0005448373 00000 n
0005449343 00000 n 0005448973 00000 n
0005449940 00000 n 0005449570 00000 n
0005450525 00000 n 0005450155 00000 n
0005451113 00000 n 0005450743 00000 n
0005451731 00000 n 0005451361 00000 n
0005452326 00000 n 0005451956 00000 n
0005452913 00000 n 0005452543 00000 n
0005453493 00000 n 0005453123 00000 n
0005454065 00000 n 0005453695 00000 n
0005454637 00000 n 0005454267 00000 n
0005455230 00000 n 0005454860 00000 n
0005455827 00000 n 0005455457 00000 n
0005456397 00000 n 0005456027 00000 n
0005456972 00000 n 0005456602 00000 n
0005457568 00000 n 0005457198 00000 n
0005458153 00000 n 0005457783 00000 n
0005458721 00000 n 0005458351 00000 n
0005459327 00000 n 0005458957 00000 n
0005459907 00000 n 0005459537 00000 n
0005460502 00000 n 0005460132 00000 n
trailer trailer
<< <<
/ID /ID
[<c5332a4dc2f7bc2ec6d1f9577b915862><c5332a4dc2f7bc2ec6d1f9577b915862>] [<096c812b34b009cb5fb9743d916201d3><096c812b34b009cb5fb9743d916201d3>]
% ReportLab generated PDF document -- digest (opensource) % ReportLab generated PDF document -- digest (opensource)
/Info 56 0 R /Info 56 0 R
@ -817,5 +817,5 @@ trailer
/Size 84 /Size 84
>> >>
startxref startxref
5461268 5460898
%%EOF %%EOF

View file

@ -123,7 +123,9 @@ def main():
"Simulator indigo; orange only on Inject faults.", "Simulator indigo; orange only on Inject faults.",
"Portal API key masked. Invoice and statement empty states are cards, not table rows. Staff typeahead uses customer names. STAFF_AUTH=1 uses verae-staff-session.", "Portal API key masked. Invoice and statement empty states are cards, not table rows. Staff typeahead uses customer names. STAFF_AUTH=1 uses verae-staff-session.",
"Admin customers: list vs edit drawer. Invoice empty state.", "Admin customers: list vs edit drawer. Invoice empty state.",
"Catalog body font is system-ui. Swagger /docs labeled stock.", "Catalog body font is system-ui. Swagger /docs stays stock with an integrator banner only.",
"CS and access-staff share verae-staff-ui review.html.",
"Staff cookies accept STAFF_COOKIE_DOMAIN for a reverse-proxy host.",
] ]
for it in items: for it in items:
story.append(p("" + it, s["body"])) story.append(p("" + it, s["body"]))
@ -132,31 +134,7 @@ def main():
story.append(p("Operator: open :3850, Fleet for replicas, Trace to inject a Zap step, Docs for PDFs. Staff: CS :3011 credit in USD; Sales :3012 quote; Accounting :3013 export; Staff plane :3025 after authz. Customers: /portal. Ops: /admin. Lab: simulator :3847.", s["body"])) story.append(p("Operator: open :3850, Fleet for replicas, Trace to inject a Zap step, Docs for PDFs. Staff: CS :3011 credit in USD; Sales :3012 quote; Accounting :3013 export; Staff plane :3025 after authz. Customers: /portal. Ops: /admin. Lab: simulator :3847.", s["body"]))
story.append(p("Issues still to consider", s["h1"])) story.append(p("Issues still to consider", s["h1"]))
remaining = [ story.append(p("None. The designer-review backlog is empty.", s["body"]))
["Severity", "Issue", "What shipped"],
["Med", "Swagger /docs remains stock (intentional).", "Left unskinned. Banner: OpenAPI explorer for integrators. Use x-api-key."],
["Low", "access-staff and CS HTML were twins.", "Shared template package verae-staff-ui."],
["Low", "Staff cookie was host-scoped.", "STAFF_COOKIE_DOMAIN plus reverse-proxy example in verae-staff-session."],
]
body = getSampleStyleSheet()["BodyText"]
body.fontSize = 8
body.leading = 10
rows = []
for i, row in enumerate(remaining):
rows.append([Paragraph(f"<b>{c}</b>" if i == 0 else c, body) for c in row])
grid = Table(rows, colWidths=[0.7 * inch, 2.6 * inch, 3.4 * inch], repeatRows=1)
grid.setStyle(TableStyle([
("BACKGROUND", (0, 0), (-1, 0), ACCENT),
("TEXTCOLOR", (0, 0), (-1, 0), colors.white),
("VALIGN", (0, 0), (-1, -1), "TOP"),
("GRID", (0, 0), (-1, -1), 0.4, colors.HexColor("#e5e7f0")),
("LEFTPADDING", (0, 0), (-1, -1), 6),
("RIGHTPADDING", (0, 0), (-1, -1), 6),
("TOPPADDING", (0, 0), (-1, -1), 5),
("BOTTOMPADDING", (0, 0), (-1, -1), 5),
("ROWBACKGROUNDS", (0, 1), (-1, -1), [colors.white, colors.HexColor("#f4f5fb")]),
]))
story.append(grid)
story.append(PageBreak()) story.append(PageBreak())
story.append(p("Screenshot atlas with usage notes", s["h1"])) story.append(p("Screenshot atlas with usage notes", s["h1"]))