edsger 0.84.0 → 0.85.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,147 @@
1
+ id: base
2
+ name: Manual Test-Case Plan
3
+ version: 0.1.0
4
+ kind: testcases
5
+ extends: null
6
+ appliesTo: ["*"]
7
+ # A standard for deriving a MANUAL test-case plan from a repository: an outline
8
+ # tree (Workflowy-style) whose root is the project, whose branches are the areas
9
+ # a human tester should exercise, and whose leaves are concrete, executable test
10
+ # cases (preconditions → steps → expected result). These are NOT automated code
11
+ # tests — they describe how a person verifies the software behaves correctly.
12
+ # The `aspects` below are candidate top-level areas — the agent keeps only the
13
+ # ones this project's code supports and grows each into a faithful subtree.
14
+
15
+ guidance: >
16
+ The root of the tree is the project itself: its name plus a one-line summary
17
+ of what a tester is validating. The first level should be 3-7 test areas
18
+ picked from the aspects below, renamed to fit the project's own vocabulary
19
+ where that is clearer. Interior nodes group features and scenarios; every
20
+ leaf is a single concrete test case that a human tester who has never read
21
+ the code can execute: what state to prepare (preconditions), the exact
22
+ actions to take (steps, each one observable), and the single expected
23
+ outcome. Derive cases from what the code actually does — real commands,
24
+ routes, screens, flags, and error branches — and cite the files that
25
+ implement the behaviour under test so an engineer can trace each case back
26
+ to code. Give every case a priority: critical (release blocker if broken),
27
+ high (core behaviour), medium (important but recoverable), low (polish).
28
+ Prefer a plan a tester can work through top-to-bottom in one sitting over an
29
+ exhaustive combinatorial matrix — depth where the risk is, brevity where the
30
+ behaviour is trivial.
31
+
32
+ maxDepth: 5
33
+
34
+ aspects:
35
+ - id: core-flows
36
+ name: Core User Flows
37
+ appliesWhen: >
38
+ Any project with runtime behaviour. The handful of end-to-end journeys
39
+ that define what the software is for (e.g. "run a build", "sign up and
40
+ log in", "generate a report") — the happy paths a release must not break.
41
+ detect: ["*"]
42
+ guidance: >
43
+ Identify the 2-5 flows that matter most from the real entry points (CLI
44
+ commands, routes, screens). One child per flow; its leaves are cases that
45
+ walk the flow start-to-finish with typical input, verifying each visible
46
+ intermediate result and the final outcome. These cases are mostly
47
+ critical/high priority.
48
+
49
+ - id: inputs-edge-cases
50
+ name: Inputs & Edge Cases
51
+ appliesWhen: >
52
+ The project accepts user input: CLI arguments and flags, form fields,
53
+ request payloads, file uploads, or configuration values.
54
+ detect: ["*"]
55
+ guidance: >
56
+ For each input surface, derive cases from the validation the code
57
+ performs (and omits): empty/missing values, boundary sizes, wrong types,
58
+ unusual-but-legal values (unicode, spaces in paths, very long strings),
59
+ and conflicting combinations of options. Each case states the exact
60
+ input to supply and the exact rejection or acceptance to expect.
61
+
62
+ - id: errors-recovery
63
+ name: Errors & Recovery
64
+ appliesWhen: >
65
+ The software has meaningful failure modes: unreachable dependencies,
66
+ missing files or permissions, interrupted operations, invalid state.
67
+ detect: ["*"]
68
+ guidance: >
69
+ Find the error branches the code actually handles (thrown/caught errors,
70
+ exit codes, retry logic, fallbacks) and write cases that force each one:
71
+ how to provoke the failure, what message/exit code/UI state the tester
72
+ should see, and — where the code claims recovery — that the system
73
+ returns to a working state afterwards.
74
+
75
+ - id: data-state
76
+ name: Data & State Integrity
77
+ appliesWhen: >
78
+ The project persists state a tester can inspect: databases, on-disk
79
+ files, caches, exports/imports, or anything with a documented format.
80
+ detect: ["migrations", "schema", "models", "*.sql", "storage", "cache"]
81
+ guidance: >
82
+ Cases that verify written data is correct and durable: perform an action,
83
+ then inspect the persisted result (file contents, DB rows, exported
84
+ artifact) against what the code promises; re-run/restart and confirm
85
+ state survives; where the code migrates or upgrades formats, test old
86
+ data still loads.
87
+
88
+ - id: integrations
89
+ name: External Integrations
90
+ appliesWhen: >
91
+ The project talks to systems it does not own: third-party APIs, auth
92
+ providers, webhooks, message brokers, or local tools it shells out to.
93
+ detect: ["client", "sdk", "api", "webhook", "queue", "http"]
94
+ guidance: >
95
+ One child per external system. Cases cover the configured happy path,
96
+ missing/invalid credentials, and the integration being unavailable —
97
+ each stating how to simulate the condition (env var unset, network off,
98
+ tool not installed) and the exact behaviour the code implements for it.
99
+
100
+ - id: config-environments
101
+ name: Configuration & Environments
102
+ appliesWhen: >
103
+ Behaviour changes with configuration: config files, environment
104
+ variables, CLI overrides, feature flags, or per-environment settings.
105
+ detect: ["config", ".env.example", "settings", "*.config.*"]
106
+ guidance: >
107
+ Derive cases from the precedence and defaults the code implements: no
108
+ config at all (defaults), each documented setting changing observable
109
+ behaviour, override order when the same value is set in several places,
110
+ and malformed configuration being reported rather than silently ignored.
111
+
112
+ - id: compatibility
113
+ name: Platforms & Compatibility
114
+ appliesWhen: >
115
+ The project targets more than one runtime surface: operating systems,
116
+ browsers, device sizes, terminal vs CI, runtime versions.
117
+ detect: ["Dockerfile", ".github", "browserslist", "engines"]
118
+ guidance: >
119
+ Only include surfaces the project explicitly supports (declared engines,
120
+ CI matrix, responsive styles). Cases name the exact platform/version to
121
+ test on and the behaviour that historically differs there (paths, line
122
+ endings, viewport layout, color output).
123
+
124
+ - id: performance-responsiveness
125
+ name: Performance & Responsiveness
126
+ appliesWhen: >
127
+ The project has user-perceivable performance characteristics worth a
128
+ manual check: large-input handling, long-running operations with
129
+ progress feedback, or interactive UI latency.
130
+ detect: ["worker", "stream", "batch", "progress"]
131
+ guidance: >
132
+ A small number of judgement cases, not benchmarks: run the realistic
133
+ "large" scenario the code is written to handle (big repo, long list,
134
+ many records), verify it completes, stays responsive, and that any
135
+ progress/cancellation affordances in the code actually work.
136
+
137
+ - id: security-access
138
+ name: Security & Access
139
+ appliesWhen: >
140
+ The project handles secrets, authentication, authorization, or renders
141
+ untrusted content — anything where a tester should probe misuse.
142
+ detect: ["auth", "token", "secret", "session", "sanitize"]
143
+ guidance: >
144
+ Cases grounded in protections the code implements: secrets never echoed
145
+ to logs/output, unauthenticated access rejected on protected surfaces,
146
+ role/permission boundaries enforced, and untrusted input rendered
147
+ inertly (escaping/sanitisation) where the code claims to do so.
@@ -0,0 +1,2 @@
1
+ (function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))l(i);new MutationObserver(i=>{for(const r of i)if(r.type==="childList")for(const c of r.addedNodes)c.tagName==="LINK"&&c.rel==="modulepreload"&&l(c)}).observe(document,{childList:!0,subtree:!0});function n(i){const r={};return i.integrity&&(r.integrity=i.integrity),i.referrerPolicy&&(r.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?r.credentials="include":i.crossOrigin==="anonymous"?r.credentials="omit":r.credentials="same-origin",r}function l(i){if(i.ep)return;i.ep=!0;const r=n(i);fetch(i.href,r)}})();var ce,b,tt,R,Re,nt,rt,fe,ee,G,lt,ke,me,ge,le={},ie=[],xt=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,_e=Array.isArray;function M(e,t){for(var n in t)e[n]=t[n];return e}function we(e){e&&e.parentNode&&e.parentNode.removeChild(e)}function St(e,t,n){var l,i,r,c={};for(r in t)r=="key"?l=t[r]:r=="ref"?i=t[r]:c[r]=t[r];if(arguments.length>2&&(c.children=arguments.length>3?ce.call(arguments,2):n),typeof e=="function"&&e.defaultProps!=null)for(r in e.defaultProps)c[r]===void 0&&(c[r]=e.defaultProps[r]);return te(e,c,l,i,null)}function te(e,t,n,l,i){var r={type:e,props:t,key:n,ref:l,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:i??++tt,__i:-1,__u:0};return i==null&&b.vnode!=null&&b.vnode(r),r}function ae(e){return e.children}function ne(e,t){this.props=e,this.context=t}function q(e,t){if(t==null)return e.__?q(e.__,e.__i+1):null;for(var n;t<e.__k.length;t++)if((n=e.__k[t])!=null&&n.__e!=null)return n.__e;return typeof e.type=="function"?q(e):null}function Et(e){if(e.__P&&e.__d){var t=e.__v,n=t.__e,l=[],i=[],r=M({},t);r.__v=t.__v+1,b.vnode&&b.vnode(r),xe(e.__P,r,t,e.__n,e.__P.namespaceURI,32&t.__u?[n]:null,l,n??q(t),!!(32&t.__u),i),r.__v=t.__v,r.__.__k[r.__i]=r,ct(l,r,i),t.__e=t.__=null,r.__e!=n&&it(r)}}function it(e){if((e=e.__)!=null&&e.__c!=null)return e.__e=e.__c.base=null,e.__k.some(function(t){if(t!=null&&t.__e!=null)return e.__e=e.__c.base=t.__e}),it(e)}function ze(e){(!e.__d&&(e.__d=!0)&&R.push(e)&&!se.__r++||Re!=b.debounceRendering)&&((Re=b.debounceRendering)||nt)(se)}function se(){try{for(var e,t=1;R.length;)R.length>t&&R.sort(rt),e=R.shift(),t=R.length,Et(e)}finally{R.length=se.__r=0}}function st(e,t,n,l,i,r,c,a,d,_,f){var v,s,h,y,$,p,x,m=l&&l.__k||ie,g=t.length;for(d=Ct(n,t,m,d,g),v=0;v<g;v++)(h=n.__k[v])!=null&&(s=h.__i!=-1&&m[h.__i]||le,h.__i=v,p=xe(e,h,s,i,r,c,a,d,_,f),y=h.__e,h.ref&&s.ref!=h.ref&&(s.ref&&Se(s.ref,null,h),f.push(h.ref,h.__c||y,h)),$==null&&y!=null&&($=y),(x=!!(4&h.__u))||s.__k===h.__k?(d=ot(h,d,e,x),x&&s.__e&&(s.__e=null)):typeof h.type=="function"&&p!==void 0?d=p:y&&(d=y.nextSibling),h.__u&=-7);return n.__e=$,d}function Ct(e,t,n,l,i){var r,c,a,d,_,f=n.length,v=f,s=0;for(e.__k=new Array(i),r=0;r<i;r++)(c=t[r])!=null&&typeof c!="boolean"&&typeof c!="function"?(typeof c=="string"||typeof c=="number"||typeof c=="bigint"||c.constructor==String?c=e.__k[r]=te(null,c,null,null,null):_e(c)?c=e.__k[r]=te(ae,{children:c},null,null,null):c.constructor===void 0&&c.__b>0?c=e.__k[r]=te(c.type,c.props,c.key,c.ref?c.ref:null,c.__v):e.__k[r]=c,d=r+s,c.__=e,c.__b=e.__b+1,a=null,(_=c.__i=$t(c,n,d,v))!=-1&&(v--,(a=n[_])&&(a.__u|=2)),a==null||a.__v==null?(_==-1&&(i>f?s--:i<f&&s++),typeof c.type!="function"&&(c.__u|=4)):_!=d&&(_==d-1?s--:_==d+1?s++:(_>d?s--:s++,c.__u|=4))):e.__k[r]=null;if(v)for(r=0;r<f;r++)(a=n[r])!=null&&!(2&a.__u)&&(a.__e==l&&(l=q(a)),at(a,a));return l}function ot(e,t,n,l){var i,r;if(typeof e.type=="function"){for(i=e.__k,r=0;i&&r<i.length;r++)i[r]&&(i[r].__=e,t=ot(i[r],t,n,l));return t}e.__e!=t&&(l&&(t&&e.type&&!t.parentNode&&(t=q(e)),n.insertBefore(e.__e,t||null)),t=e.__e);do t=t&&t.nextSibling;while(t!=null&&t.nodeType==8);return t}function $t(e,t,n,l){var i,r,c,a=e.key,d=e.type,_=t[n],f=_!=null&&(2&_.__u)==0;if(_===null&&a==null||f&&a==_.key&&d==_.type)return n;if(l>(f?1:0)){for(i=n-1,r=n+1;i>=0||r<t.length;)if((_=t[c=i>=0?i--:r++])!=null&&!(2&_.__u)&&a==_.key&&d==_.type)return c}return-1}function Oe(e,t,n){t[0]=="-"?e.setProperty(t,n??""):e[t]=n==null?"":typeof n!="number"||xt.test(t)?n:n+"px"}function X(e,t,n,l,i){var r,c;e:if(t=="style")if(typeof n=="string")e.style.cssText=n;else{if(typeof l=="string"&&(e.style.cssText=l=""),l)for(t in l)n&&t in n||Oe(e.style,t,"");if(n)for(t in n)l&&n[t]==l[t]||Oe(e.style,t,n[t])}else if(t[0]=="o"&&t[1]=="n")r=t!=(t=t.replace(lt,"$1")),c=t.toLowerCase(),t=c in e||t=="onFocusOut"||t=="onFocusIn"?c.slice(2):t.slice(2),e.l||(e.l={}),e.l[t+r]=n,n?l?n[G]=l[G]:(n[G]=ke,e.addEventListener(t,r?ge:me,r)):e.removeEventListener(t,r?ge:me,r);else{if(i=="http://www.w3.org/2000/svg")t=t.replace(/xlink(H|:h)/,"h").replace(/sName$/,"s");else if(t!="width"&&t!="height"&&t!="href"&&t!="list"&&t!="form"&&t!="tabIndex"&&t!="download"&&t!="rowSpan"&&t!="colSpan"&&t!="role"&&t!="popover"&&t in e)try{e[t]=n??"";break e}catch{}typeof n=="function"||(n==null||n===!1&&t[4]!="-"?e.removeAttribute(t):e.setAttribute(t,t=="popover"&&n==1?"":n))}}function je(e){return function(t){if(this.l){var n=this.l[t.type+e];if(t[ee]==null)t[ee]=ke++;else if(t[ee]<n[G])return;return n(b.event?b.event(t):t)}}}function xe(e,t,n,l,i,r,c,a,d,_){var f,v,s,h,y,$,p,x,m,g,U,P,D,F,I,B,T=t.type;if(t.constructor!==void 0)return null;128&n.__u&&(d=!!(32&n.__u),r=[a=t.__e=n.__e]),(f=b.__b)&&f(t);e:if(typeof T=="function"){v=c.length;try{if(m=t.props,g=T.prototype&&T.prototype.render,U=(f=T.contextType)&&l[f.__c],P=f?U?U.props.value:f.__:l,n.__c?x=(s=t.__c=n.__c).__=s.__E:(g?t.__c=s=new T(m,P):(t.__c=s=new ne(m,P),s.constructor=T,s.render=Pt),U&&U.sub(s),s.state||(s.state={}),s.__n=l,h=s.__d=!0,s.__h=[],s._sb=[]),g&&s.__s==null&&(s.__s=s.state),g&&T.getDerivedStateFromProps!=null&&(s.__s==s.state&&(s.__s=M({},s.__s)),M(s.__s,T.getDerivedStateFromProps(m,s.__s))),y=s.props,$=s.state,s.__v=t,h)g&&T.getDerivedStateFromProps==null&&s.componentWillMount!=null&&s.componentWillMount(),g&&s.componentDidMount!=null&&s.__h.push(s.componentDidMount);else{if(g&&T.getDerivedStateFromProps==null&&m!==y&&s.componentWillReceiveProps!=null&&s.componentWillReceiveProps(m,P),t.__v==n.__v||!s.__e&&s.shouldComponentUpdate!=null&&s.shouldComponentUpdate(m,s.__s,P)===!1){t.__v!=n.__v&&(s.props=m,s.state=s.__s,s.__d=!1),t.__e=n.__e,t.__k=n.__k,t.__k.some(function(H){H&&(H.__=t)}),ie.push.apply(s.__h,s._sb),s._sb=[],s.__h.length&&c.push(s);break e}s.componentWillUpdate!=null&&s.componentWillUpdate(m,s.__s,P),g&&s.componentDidUpdate!=null&&s.__h.push(function(){s.componentDidUpdate(y,$,p)})}if(s.context=P,s.props=m,s.__P=e,s.__e=!1,D=b.__r,F=0,g)s.state=s.__s,s.__d=!1,D&&D(t),f=s.render(s.props,s.state,s.context),ie.push.apply(s.__h,s._sb),s._sb=[];else do s.__d=!1,D&&D(t),f=s.render(s.props,s.state,s.context),s.state=s.__s;while(s.__d&&++F<25);s.state=s.__s,s.getChildContext!=null&&(l=M(M({},l),s.getChildContext())),g&&!h&&s.getSnapshotBeforeUpdate!=null&&(p=s.getSnapshotBeforeUpdate(y,$)),I=f!=null&&f.type===ae&&f.key==null?_t(f.props.children):f,a=st(e,_e(I)?I:[I],t,n,l,i,r,c,a,d,_),s.base=t.__e,t.__u&=-161,s.__h.length&&c.push(s),x&&(s.__E=s.__=null)}catch(H){if(c.length=v,t.__v=null,d||r!=null)if(H.then){for(t.__u|=d?160:128;a&&a.nodeType==8&&a.nextSibling;)a=a.nextSibling;r!=null&&(r[r.indexOf(a)]=null),t.__e=a}else{if(r!=null)for(B=r.length;B--;)we(r[B]);ve(t)}else t.__e=n.__e,!t.__k&&n.__k&&(t.__k=n.__k),H.then||ve(t);b.__e(H,t,n)}}else r==null&&t.__v==n.__v?(t.__k=n.__k,t.__e=n.__e):a=t.__e=Tt(n.__e,t,n,l,i,r,c,d,_);return(f=b.diffed)&&f(t),128&t.__u?void 0:a}function ve(e){e&&(e.__c&&(e.__c.__e=!0),e.__k&&e.__k.some(ve))}function ct(e,t,n){for(var l=0;l<n.length;l++)Se(n[l],n[++l],n[++l]);b.__c&&b.__c(t,e),e.some(function(i){try{e=i.__h,i.__h=[],e.some(function(r){r.call(i)})}catch(r){b.__e(r,i.__v)}})}function _t(e){return typeof e!="object"||e==null||e.__b>0?e:_e(e)?e.map(_t):e.constructor!==void 0?null:M({},e)}function Tt(e,t,n,l,i,r,c,a,d){var _,f,v,s,h,y,$,p=n.props||le,x=t.props,m=t.type;if(m=="svg"?i="http://www.w3.org/2000/svg":m=="math"?i="http://www.w3.org/1998/Math/MathML":i||(i="http://www.w3.org/1999/xhtml"),r!=null){for(_=0;_<r.length;_++)if((h=r[_])&&"setAttribute"in h==!!m&&(m?h.localName==m:h.nodeType==3)){e=h,r[_]=null;break}}if(e==null){if(m==null)return document.createTextNode(x);e=document.createElementNS(i,m,x.is&&x),a&&(b.__m&&b.__m(t,r),a=!1),r=null}if(m==null)p===x||a&&e.data==x||(e.data=x);else{if(r=m=="textarea"&&x.defaultValue!=null?null:r&&ce.call(e.childNodes),!a&&r!=null)for(p={},_=0;_<e.attributes.length;_++)p[(h=e.attributes[_]).name]=h.value;for(_ in p)h=p[_],_=="dangerouslySetInnerHTML"?v=h:_=="children"||_ in x||_=="value"&&"defaultValue"in x||_=="checked"&&"defaultChecked"in x||X(e,_,null,h,i);for(_ in x)h=x[_],_=="children"?s=h:_=="dangerouslySetInnerHTML"?f=h:_=="value"?y=h:_=="checked"?$=h:a&&typeof h!="function"||p[_]===h||X(e,_,h,p[_],i);if(f)a||v&&(f.__html==v.__html||f.__html==e.innerHTML)||(e.innerHTML=f.__html),t.__k=[];else if(v&&(e.innerHTML=""),st(t.type=="template"?e.content:e,_e(s)?s:[s],t,n,l,m=="foreignObject"?"http://www.w3.org/1999/xhtml":i,r,c,r?r[0]:n.__k&&q(n,0),a,d),r!=null)for(_=r.length;_--;)we(r[_]);a&&m!="textarea"||(_="value",m=="progress"&&y==null?e.removeAttribute("value"):y!=null&&(y!==e[_]||m=="progress"&&!y||m=="option"&&y!=p[_])&&X(e,_,y,p[_],i),_="checked",$!=null&&$!=e[_]&&X(e,_,$,p[_],i))}return e}function Se(e,t,n){try{if(typeof e=="function"){var l=typeof e.__u=="function";l&&e.__u(),l&&t==null||(e.__u=e(t))}else e.current=t}catch(i){b.__e(i,n)}}function at(e,t,n){var l,i;if(b.unmount&&b.unmount(e),(l=e.ref)&&(l.current&&l.current!=e.__e||Se(l,null,t)),(l=e.__c)!=null){if(l.componentWillUnmount)try{l.componentWillUnmount()}catch(r){b.__e(r,t)}l.base=l.__P=l.__n=null}if(l=e.__k)for(i=0;i<l.length;i++)l[i]&&at(l[i],t,n||typeof e.type!="function");n||we(e.__e),e.__c=e.__=e.__e=void 0}function Pt(e,t,n){return this.constructor(e,n)}function At(e,t,n){var l,i,r,c;t==document&&(t=document.documentElement),b.__&&b.__(e,t),i=(l=!1)?null:t.__k,r=[],c=[],xe(t,e=t.__k=St(ae,null,[e]),i||le,le,t.namespaceURI,i?null:t.firstChild?ce.call(t.childNodes):null,r,i?i.__e:t.firstChild,l,c),ct(r,e,c),e.props.children=null}ce=ie.slice,b={__e:function(e,t,n,l){for(var i,r,c;t=t.__;)if((i=t.__c)&&!i.__)try{if((r=i.constructor)&&r.getDerivedStateFromError!=null&&(i.setState(r.getDerivedStateFromError(e)),c=i.__d),i.componentDidCatch!=null&&(i.componentDidCatch(e,l||{}),c=i.__d),c)return i.__E=i}catch(a){e=a}throw e}},tt=0,ne.prototype.setState=function(e,t){var n;n=this.__s!=null&&this.__s!=this.state?this.__s:this.__s=M({},this.state),typeof e=="function"&&(e=e(M({},n),this.props)),e&&M(n,e),e!=null&&this.__v&&(t&&this._sb.push(t),ze(this))},ne.prototype.forceUpdate=function(e){this.__v&&(this.__e=!0,e&&this.__h.push(e),ze(this))},ne.prototype.render=ae,R=[],nt=typeof Promise=="function"?Promise.prototype.then.bind(Promise.resolve()):setTimeout,rt=function(e,t){return e.__v.__b-t.__v.__b},se.__r=0,fe=Math.random().toString(8),ee="__d"+fe,G="__a"+fe,lt=/(PointerCapture)$|Capture$/i,ke=0,me=je(!1),ge=je(!0);var Nt=0;function o(e,t,n,l,i,r){t||(t={});var c,a,d=t;if("ref"in d)for(a in d={},t)a=="ref"?c=t[a]:d[a]=t[a];var _={type:e,props:d,key:n,ref:c,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:--Nt,__i:-1,__u:0,__source:i,__self:r};if(typeof e=="function"&&(c=e.defaultProps))for(a in c)d[a]===void 0&&(d[a]=c[a]);return b.vnode&&b.vnode(_),_}var K,S,pe,qe,Q=0,ut=[],E=b,Be=E.__b,We=E.__r,Ve=E.diffed,Ge=E.__c,Ke=E.unmount,Qe=E.__;function Ee(e,t){E.__h&&E.__h(S,e,Q||t),Q=0;var n=S.__H||(S.__H={__:[],__h:[]});return e>=n.__.length&&n.__.push({}),n.__[e]}function L(e){return Q=1,Dt(pt,e)}function Dt(e,t,n){var l=Ee(K++,2);if(l.t=e,!l.__c&&(l.__=[pt(void 0,t),function(a){var d=l.__N?l.__N[0]:l.__[0],_=l.t(d,a);d!==_&&(l.__N=[_,l.__[1]],l.__c.setState({}))}],l.__c=S,!S.__f)){var i=function(a,d,_){if(!l.__c.__H)return!0;var f=!1,v=l.__c.props!==a;if(l.__c.__H.__.some(function(h){if(h.__N){f=!0;var y=h.__[0];h.__=h.__N,h.__N=void 0,y!==h.__[0]&&(v=!0)}}),r){var s=r.call(this,a,d,_);return f?s||v:s}return!f||v};S.__f=!0;var r=S.shouldComponentUpdate,c=S.componentWillUpdate;S.componentWillUpdate=function(a,d,_){if(this.__e){var f=r;r=void 0,i(a,d,_),r=f}c&&c.call(this,a,d,_)},S.shouldComponentUpdate=i}return l.__N||l.__}function O(e,t){var n=Ee(K++,3);!E.__s&&ft(n.__H,t)&&(n.__=e,n.u=t,S.__H.__h.push(n))}function dt(e){return Q=5,N(function(){return{current:e}},[])}function N(e,t){var n=Ee(K++,7);return ft(n.__H,t)&&(n.__=e(),n.__H=t,n.__h=e),n.__}function V(e,t){return Q=8,N(function(){return e},t)}function Je(){for(var e;e=ut.shift();){var t=e.__H;if(e.__P&&t)try{t.__h.some(ye),t.__h.some(ht),t.__h=[]}catch(n){t.__h=[],E.__e(n,e.__v)}}}E.__b=function(e){S=null,Be&&Be(e)},E.__=function(e,t){e&&t.__k&&t.__k.__m&&(e.__m=t.__k.__m),Qe&&Qe(e,t)},E.__r=function(e){We&&We(e),K=0;var t=(S=e.__c).__H;t&&(pe===S?(t.__h=[],S.__h=[],t.__.some(function(n){n.__N&&(n.__=n.__N),n.u=n.__N=void 0})):(t.__h.length&&Je(),K=0)),pe=S},E.diffed=function(e){Ve&&Ve(e);var t=e.__c;t&&t.__H&&(t.__H.__h.length&&(ut.push(t)!==1&&qe===E.requestAnimationFrame||((qe=E.requestAnimationFrame)||It)(Je)),t.__H.__.some(function(n){n.u&&(n.__H=n.u,n.u=void 0)})),pe=S=null},E.__c=function(e,t){t.some(function(n){try{n.__h.some(ye),n.__h=n.__h.filter(function(l){return!l.__||ht(l)})}catch(l){t.some(function(i){i.__h&&(i.__h=[])}),t=[],E.__e(l,n.__v)}}),Ge&&Ge(e,t)},E.unmount=function(e){Ke&&Ke(e);var t,n=e.__c;n&&n.__H&&(n.__H.__.some(function(l){try{ye(l)}catch(i){t=i}}),n.__H=void 0,t&&E.__e(t,n.__v))};var Ye=typeof requestAnimationFrame=="function";function It(e){var t,n=function(){clearTimeout(l),Ye&&cancelAnimationFrame(t),setTimeout(e)},l=setTimeout(n,35);Ye&&(t=requestAnimationFrame(n))}function ye(e){var t=S,n=e.__c;typeof n=="function"&&(e.__c=void 0,n()),S=t}function ht(e){var t=S;e.__c=e.__(),S=t}function ft(e,t){return!e||e.length!==t.length||t.some(function(n,l){return n!==e[l]})}function pt(e,t){return typeof t=="function"?t(e):t}async function Ht(){if(window.__EDSGER_TESTCASES__)return Ze(window.__EDSGER_TESTCASES__);const e=await fetch("./edsger-testcases.json",{cache:"no-store"});if(!e.ok)throw new Error(`Could not load edsger-testcases.json (HTTP ${e.status})`);return Ze(await e.json())}function Ze(e){const t=[...e.history??[]].sort((n,l)=>n.generatedAt<l.generatedAt?-1:n.generatedAt>l.generatedAt?1:0);return{repo:e.repo,latest:e.latest??null,history:t,runs:e.runs??{}}}function Lt(e){const t=new Map,n=(l,i)=>{t.set(l.id,{node:l,parent:i});for(const r of l.children)n(r,l.id)};return n(e,null),t}function Mt(e,t){const n=new Set,l=i=>{let r=t(i);for(const c of i.children)l(c)&&(r=!0);return r&&n.add(i.id),r};return l(e),n}function mt(e,t,n){return e.children.length?t?e.children.some(l=>t.has(l.id)):n.has(e.id):!1}function Ut(e,t,n){const l=[],i=r=>{for(const c of r.children)t&&!t.has(c.id)||(l.push(c.id),mt(c,t,n)&&i(c))};return i(e),l}function Ft(e,t){if(!t)return[];const n=[];let l=t;for(;l;){const i=e.get(l);if(!i)break;n.unshift(i.node),l=i.parent}return n}function Rt(e,t){if(!t)return[{text:e,hit:!1}];const n=e.toLowerCase(),l=[];let i=0;for(;;){const r=n.indexOf(t,i);if(r===-1)break;r>i&&l.push({text:e.slice(i,r),hit:!1}),l.push({text:e.slice(r,r+t.length),hit:!0}),i=r+t.length}return i<e.length&&l.push({text:e.slice(i),hit:!1}),l.length?l:[{text:e,hit:!1}]}const zt=["critical","high","medium","low"];function ue(e){return e.steps.length>0||!!e.expected}function oe(e){return e.priority??"medium"}function Ce(e){return(ue(e)?1:0)+e.children.reduce((t,n)=>t+Ce(n),0)}function Ot(e){const t={critical:0,high:0,medium:0,low:0},n=l=>{ue(l)&&t[oe(l)]++,l.children.forEach(n)};return n(e),t}function jt(e,t){return[e.title,e.summary,...e.files,...e.preconditions,...e.steps,e.expected??""].join(`
2
+ `).toLowerCase().includes(t)}function qt(e,t){return n=>!(e&&!jt(n,e)||t.size&&!(ue(n)&&t.has(oe(n))))}function $e(e){return e.preconditions.length>0||e.steps.length>0||!!e.expected}function re(e){return e.children.length>0||$e(e)}function j({text:e,query:t}){return t?Rt(e,t).map((n,l)=>n.hit?o("mark",{children:n.text},l):n.text):e}function gt({node:e,query:t}){return o("div",{class:"case-detail",children:[e.preconditions.length?o("div",{class:"case-block",children:[o("span",{class:"case-label",children:"Preconditions"}),o("ul",{children:e.preconditions.map((n,l)=>o("li",{children:o(j,{text:n,query:t})},l))})]}):null,e.steps.length?o("div",{class:"case-block",children:[o("span",{class:"case-label",children:"Steps"}),o("ol",{children:e.steps.map((n,l)=>o("li",{children:o(j,{text:n,query:t})},l))})]}):null,e.expected?o("div",{class:"case-block expected",children:[o("span",{class:"case-label",children:"Expected"}),o("p",{children:o(j,{text:e.expected,query:t})})]}):null]})}function Bt({node:e,view:t,onToggle:n,onZoom:l,onSelect:i}){const r=e.children.length>0,c=re(e),a=t.isExpanded(e),d=t.selectedId===e.id,_=dt(null);O(()=>{var s;d&&((s=_.current)==null||s.scrollIntoView({block:"nearest"}))},[d]);const f=["row",d?"selected":"",t.isMatch(e)?"match":""].filter(Boolean).join(" "),v=r&&!a?Ce(e):0;return o("div",{class:"node","data-kind":e.kind,children:[o("div",{class:f,ref:_,onClick:()=>i(e.id),children:[c?o("button",{class:`disclosure ${a?"open":""}`,title:a?"Collapse":"Expand",onClick:s=>{s.stopPropagation(),i(e.id),n(e.id)},children:"▸"}):o("span",{class:"disclosure spacer"}),o("button",{class:`dot ${r&&!a?"loaded":""}`,title:"Zoom in",onClick:s=>{s.stopPropagation(),l(e.id)},children:o("span",{})}),o("div",{class:"node-text",children:[o("span",{class:"title",onDblClick:()=>l(e.id),children:o(j,{text:e.title,query:t.query})}),ue(e)?o("span",{class:`priority-badge prio-${oe(e)}`,children:oe(e)}):e.kind&&e.kind!=="topic"?o("span",{class:"kind-badge",children:e.kind}):null,v?o("span",{class:"count-badge",children:[v," case",v===1?"":"s"]}):null,e.summary?o("span",{class:"summary",children:o(j,{text:e.summary,query:t.query})}):null,e.files.length?o("span",{class:"files",children:e.files.map(s=>o("code",{class:"file",children:o(j,{text:s,query:t.query})},s))}):null]})]}),a&&$e(e)?o(gt,{node:e,query:t.query}):null,r&&a?o("div",{class:"children",children:o(vt,{nodes:e.children,view:t,onToggle:n,onZoom:l,onSelect:i})}):null]})}function vt({nodes:e,view:t,onToggle:n,onZoom:l,onSelect:i}){return o("div",{class:"outline",children:e.filter(r=>t.isVisible(r)).map(r=>o(Bt,{node:r,view:t,onToggle:n,onZoom:l,onSelect:i},r.id))})}const yt="edsger-theme",be=new Set;function Wt(){return typeof matchMedia<"u"&&matchMedia("(prefers-color-scheme: light)").matches?"light":"dark"}function Vt(){if(typeof document<"u"){const e=document.documentElement.getAttribute("data-theme");if(e==="light"||e==="dark")return e}try{const e=localStorage.getItem(yt);if(e==="light"||e==="dark")return e}catch{}return Wt()}let J=Vt();typeof document<"u"&&!document.documentElement.getAttribute("data-theme")&&document.documentElement.setAttribute("data-theme",J);function Gt(){return J}function Kt(e){J=e,typeof document<"u"&&document.documentElement.setAttribute("data-theme",e);try{localStorage.setItem(yt,e)}catch{}for(const t of be)t()}function Qt(){Kt(J==="dark"?"light":"dark")}function Jt(e){return be.add(e),()=>{be.delete(e)}}function Yt(){const[e,t]=L(J);return O(()=>Jt(()=>t(Gt())),[]),e}function Zt(){const e=Yt(),n=`Switch to ${e==="dark"?"light":"dark"} mode`;return o("button",{type:"button",class:"theme-toggle",title:n,"aria-label":n,onClick:()=>Qt(),children:o("span",{"aria-hidden":"true",children:e==="dark"?"☀":"☾"})})}function Xe(e){const t=new Date(e);return Number.isNaN(t.getTime())?e:t.toLocaleString(void 0,{year:"numeric",month:"short",day:"2-digit",hour:"2-digit",minute:"2-digit"})}function Xt(){var Ne;const[e,t]=L(null),[n,l]=L(null),[i,r]=L(null),[c,a]=L(null),[d,_]=L(new Set),[f,v]=L(null),[s,h]=L(""),[y,$]=L(new Set);O(()=>{Ht().then(t).catch(u=>l(u instanceof Error?u.message:String(u)))},[]);const p=N(()=>e?i&&e.runs[i]?e.runs[i]:e.latest:null,[e,i]),x=N(()=>e?[...e.history].reverse():[],[e]),m=N(()=>p?Lt(p.root):null,[p]);O(()=>{p&&(a(null),v(null),$(new Set),_(new Set(p.root.children.map(u=>u.id))))},[p]);const g=N(()=>p?c&&(m!=null&&m.get(c))?m.get(c).node:p.root:null,[p,m,c]),U=N(()=>m?Ft(m,c):[],[m,c]),P=s.trim().toLowerCase(),D=!!P||y.size>0,F=N(()=>qt(P,y),[P,y]),I=N(()=>g&&D?Mt(g,F):null,[g,D,F]),B=N(()=>({isVisible:u=>I?I.has(u.id):!0,isExpanded:u=>u.children.length?mt(u,I,d):d.has(u.id)||!!P&&F(u),isMatch:u=>D&&F(u),query:P,selectedId:f}),[I,d,P,F,D,f]),T=N(()=>g?Ut(g,I,d):[],[g,I,d]),H=V(u=>{_(w=>{const k=new Set(w);return k.has(u)?k.delete(u):k.add(u),k})},[]),bt=V(u=>{$(w=>{const k=new Set(w);return k.has(u)?k.delete(u):k.add(u),k})},[]),z=V(u=>{if(a(u),v(null),h(""),u&&(m!=null&&m.get(u))){const w=m.get(u).node;_(k=>{const C=new Set(k);C.add(u);for(const A of w.children)C.add(A.id);return C})}},[m]),kt=V(()=>{g&&_(u=>{const w=new Set(u),k=C=>{re(C)&&w.add(C.id),C.children.forEach(k)};return k(g),w})},[g]),wt=V(()=>{g&&_(u=>{const w=new Set(u),k=C=>{w.delete(C.id),C.children.forEach(k)};for(const C of g.children)k(C);return w})},[g]),Te=dt({index:m,flat:T,selected:f,expanded:d,zoomId:c});Te.current={index:m,flat:T,selected:f,expanded:d,zoomId:c},O(()=>{const u=w=>{var He,Le,Me,Ue,Fe;const{index:k,flat:C,selected:A,expanded:De,zoomId:Y}=Te.current,Z=w.target;if(Z&&(Z.tagName==="INPUT"||Z.tagName==="SELECT")){w.key==="Escape"&&Z.blur();return}if(!k||!C.length){w.key==="Escape"&&Y&&(w.preventDefault(),z(((He=k==null?void 0:k.get(Y))==null?void 0:He.parent)??null));return}const Ie=A?C.indexOf(A):-1;switch(w.key){case"ArrowDown":w.preventDefault(),v(C[Math.min(Ie+1,C.length-1)]??null);break;case"ArrowUp":w.preventDefault(),v(C[Math.max(Ie-1,0)]??null);break;case"ArrowRight":{if(!A)break;w.preventDefault();const W=(Le=k.get(A))==null?void 0:Le.node;W&&re(W)&&!De.has(A)&&H(A);break}case"ArrowLeft":{if(!A)break;w.preventDefault();const W=(Me=k.get(A))==null?void 0:Me.node;if(W&&re(W)&&De.has(A))H(A);else{const he=(Ue=k.get(A))==null?void 0:Ue.parent;he&&C.includes(he)&&v(he)}break}case"Enter":A&&(w.preventDefault(),z(A));break;case"Escape":Y&&(w.preventDefault(),z(((Fe=k.get(Y))==null?void 0:Fe.parent)??null));break}};return window.addEventListener("keydown",u),()=>window.removeEventListener("keydown",u)},[H,z]),O(()=>{f&&!T.includes(f)&&v(null)},[T,f]);const Pe=(e==null?void 0:e.repo)??(p==null?void 0:p.repo)??"",de=N(()=>g?Ot(g):null,[g]),Ae=N(()=>g?Ce(g):0,[g]);return o("div",{class:"app",children:[o("header",{class:"topbar",children:[o("div",{class:"brand",children:[o("span",{class:"logo",children:"edsger"}),o("span",{class:"subtitle",children:"test cases"})]}),o("div",{class:"topbar-actions",children:[Pe?o("div",{class:"repo",children:Pe}):null,o(Zt,{})]})]}),o("main",{class:"content",children:n?o("div",{class:"empty",children:[o("strong",{children:"Failed to load data."}),o("div",{class:"muted",children:n})]}):e?!p||!g?o("div",{class:"empty",children:["No test cases yet. Run ",o("code",{children:"edsger testcases"}),"."]}):o("div",{class:"stack",children:[c?null:o("section",{class:"profile",children:[o("p",{class:"summary",children:p.profile.summary}),p.profile.kinds.length?o("div",{class:"chips",children:p.profile.kinds.map(u=>o("span",{class:"chip kind",children:u},u))}):null,o("dl",{class:"facts",children:[o("div",{children:[o("dt",{children:"Languages"}),o("dd",{children:p.languages.join(", ")||"generic"})]}),o("div",{children:[o("dt",{children:"Test cases"}),o("dd",{children:[p.caseCount," · depth ",p.depth]})]}),o("div",{children:[o("dt",{children:"Commit"}),o("dd",{children:(Ne=p.git)!=null&&Ne.commit?o("code",{children:[p.git.commit,p.git.branch?` (${p.git.branch})`:"",p.git.dirty?" ✻":""]}):"—"})]}),o("div",{children:[o("dt",{children:"Generated"}),o("dd",{children:Xe(p.generatedAt)})]}),x.length>1?o("div",{children:[o("dt",{children:"Run"}),o("dd",{children:o("select",{class:"run-select",value:i??p.runId,onChange:u=>r(u.target.value),children:x.map(u=>o("option",{value:u.runId,children:[Xe(u.generatedAt)," · ",u.caseCount," cases"]},u.runId))})})]}):null]})]}),o("section",{class:"outline-panel",children:[o("div",{class:"outline-toolbar",children:[U.length?o("nav",{class:"breadcrumb",children:[o("button",{class:"crumb",onClick:()=>z(null),children:p.root.title}),U.slice(1,-1).map(u=>o("span",{children:[o("span",{class:"crumb-sep",children:"›"}),o("button",{class:"crumb",onClick:()=>z(u.id),children:u.title})]},u.id)),o("span",{class:"crumb-sep",children:"›"}),o("span",{class:"crumb current",children:g.title})]}):o("div",{class:"breadcrumb muted",children:"↑↓ ←→ navigate · Enter zoom · Esc back"}),o("div",{class:"outline-actions",children:[o("input",{class:"search",type:"search",placeholder:"Search titles, steps, expected, files…",value:s,onInput:u=>h(u.target.value)}),o("button",{class:"ghost-btn",onClick:kt,children:"Expand all"}),o("button",{class:"ghost-btn",onClick:wt,children:"Collapse all"})]})]}),de?o("div",{class:"priority-bar",children:[o("span",{class:"priority-total muted",children:[Ae," case",Ae===1?"":"s"]}),zt.map(u=>o("button",{class:`priority-chip prio-${u} ${y.has(u)?"on":""}`,disabled:de[u]===0,title:`Show only ${u}-priority cases`,onClick:()=>bt(u),children:[u," ",o("b",{children:de[u]})]},u)),y.size?o("button",{class:"ghost-btn",onClick:()=>$(new Set),children:"Clear filter"}):null]}):null,o("div",{class:"zoom-head",children:[o("h2",{class:"zoom-title",children:g.title}),g.summary?o("p",{class:"zoom-summary",children:g.summary}):null,g.files.length?o("div",{class:"files",children:g.files.map(u=>o("code",{class:"file",children:u},u))}):null,c&&$e(g)?o(gt,{node:g,query:""}):null]}),D&&!T.length?o("div",{class:"empty muted",children:["No test cases match",P?` “${s}”`:"",y.size?` with priority ${[...y].join("/")}`:"","."]}):o(vt,{nodes:g.children,view:B,onToggle:H,onZoom:z,onSelect:v})]}),p.notes&&!c?o("section",{class:"notes",children:[o("h2",{children:"Notes"}),o("p",{children:p.notes})]}):null]}):o("div",{class:"empty",children:"Loading…"})}),o("footer",{class:"foot",children:o("span",{children:"Generated by edsger"})})]})}const et=document.getElementById("app");et&&At(o(Xt,{}),et);
@@ -0,0 +1 @@
1
+ :root,:root[data-theme=dark]{--bg: #0d1117;--panel: #161b22;--panel-2: #1c2129;--border: #30363d;--text: #e6edf3;--muted: #8b949e;--accent: #58a6ff;--on-accent: #04101f;--chart-line: #e6edf3;--chart-axis: #8b949e;--chart-grid: #21262d;color-scheme:dark}:root[data-theme=light]{--bg: #ffffff;--panel: #f6f8fa;--panel-2: #eaeef2;--border: #d0d7de;--text: #1f2328;--muted: #59636e;--accent: #0969da;--on-accent: #ffffff;--chart-line: #1f2328;--chart-axis: #59636e;--chart-grid: #d8dee4;color-scheme:light}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--text);font:14px/1.5 -apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif}code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.9em;background:var(--panel-2);padding:1px 5px;border-radius:5px}.app{max-width:1040px;margin:0 auto;padding:0 20px 60px}.topbar{display:flex;align-items:baseline;justify-content:space-between;padding:22px 0 14px}.brand{display:flex;align-items:baseline;gap:10px}.logo{font-weight:800;font-size:22px;letter-spacing:-.5px}.subtitle{color:var(--muted)}.repo{color:var(--muted);font-family:ui-monospace,monospace}.topbar-actions{display:flex;align-items:center;gap:14px}.theme-toggle{display:inline-flex;align-items:center;justify-content:center;width:34px;height:30px;padding:0;background:var(--panel-2);border:1px solid var(--border);border-radius:8px;color:var(--text);font-size:15px;line-height:1;cursor:pointer}.theme-toggle:hover{border-color:var(--accent);color:var(--accent)}.tabs{display:flex;gap:4px;border-bottom:1px solid var(--border);margin-bottom:22px}.tab{background:none;border:none;border-bottom:2px solid transparent;color:var(--muted);padding:10px 14px;font-size:14px;cursor:pointer}.tab:hover{color:var(--text)}.tab.active{color:var(--text);border-bottom-color:var(--accent);font-weight:600}.stack{display:flex;flex-direction:column;gap:18px}.two-col{display:grid;grid-template-columns:1fr 1fr;gap:18px}@media (max-width: 720px){.two-col{grid-template-columns:1fr}}.card{background:var(--panel);border:1px solid var(--border);border-radius:12px;padding:18px 20px}.card-title{margin:0 0 14px;font-size:15px;font-weight:600}.hero{display:flex;gap:26px;align-items:center;background:var(--panel);border:1px solid var(--border);border-radius:12px;padding:22px}@media (max-width: 720px){.hero{flex-direction:column;align-items:flex-start}}.hero-meta{flex:1}.summary{margin:0 0 14px;font-size:15px}.facts{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px 18px;margin:0}.facts div{display:flex;flex-direction:column}.facts dt{color:var(--muted);font-size:12px;text-transform:uppercase;letter-spacing:.4px}.facts dd{margin:2px 0 0}.ring svg{display:block}.ring-track{fill:none;stroke:var(--border);stroke-width:12}.ring-value{fill:none;stroke-width:12;stroke-linecap:round;transition:stroke-dasharray .6s ease}.ring-score{font-size:34px;font-weight:800;text-anchor:middle}.ring-grade{font-size:12px;fill:var(--muted);text-anchor:middle}.bar-row{display:grid;grid-template-columns:220px 1fr 120px;align-items:center;gap:12px;padding:5px 0}@media (max-width: 620px){.bar-row{grid-template-columns:130px 1fr 70px}}.bar-label{color:var(--text)}.bar-track{background:var(--panel-2);border-radius:6px;height:10px;overflow:hidden}.bar-fill{height:100%;border-radius:6px;transition:width .5s ease}.bar-value{color:var(--muted);text-align:right;font-variant-numeric:tabular-nums}.list{margin:0;padding-left:18px}.list li{margin:4px 0}.list.good li::marker{color:#3fb950}.list.bad li::marker{color:#f85149}.recs{list-style:none;margin:0;padding:0}.recs li{padding:8px 0;border-bottom:1px solid var(--border)}.recs li:last-child{border-bottom:none}.pill{display:inline-block;font-size:11px;text-transform:uppercase;border-radius:20px;padding:2px 8px;margin-right:8px;font-weight:700}.pill.high{background:#6e2019;color:#ff7b72}.pill.medium{background:#5a4212;color:#e3b341}.pill.low{background:#22333b;color:#7ee2c8}:root[data-theme=light] .pill.high{background:#ffebe9;color:#cf222e}:root[data-theme=light] .pill.medium{background:#fff8c5;color:#9a6700}:root[data-theme=light] .pill.low{background:#dafbe1;color:#1a7f37}.run-picker{display:flex;align-items:center;gap:10px}.run-picker select,select{background:var(--panel-2);color:var(--text);border:1px solid var(--border);border-radius:8px;padding:6px 10px}.crit-list{display:flex;flex-direction:column;gap:6px}.crit{border:1px solid var(--border);border-radius:8px;padding:8px 12px;background:var(--panel-2)}.crit summary{display:flex;align-items:center;gap:10px;cursor:pointer;list-style:none}.crit summary::-webkit-details-marker{display:none}.score-chip{font-variant-numeric:tabular-nums;font-weight:700;color:#0d1117;border-radius:6px;padding:1px 8px;font-size:12px}.crit-title{font-weight:500}.crit-just{margin:10px 0 6px;color:var(--text)}.evidence{margin:0;padding-left:18px}.evidence li{margin:3px 0}.table-wrap{overflow-x:auto}table.history{width:100%;border-collapse:collapse;font-variant-numeric:tabular-nums}table.history th,table.history td{padding:7px 10px;border-bottom:1px solid var(--border);text-align:left;white-space:nowrap}table.history th{color:var(--muted);font-weight:600;font-size:12px}table.history .num{text-align:right}table.history .cat{color:var(--muted)}table.history .strong{font-weight:700}.up{color:#3fb950}.down{color:#f85149}:root[data-theme=light] .up,:root[data-theme=light] .list.good li::marker{color:#1a7f37}:root[data-theme=light] .down,:root[data-theme=light] .list.bad li::marker{color:#cf222e}.grade-dot{font-size:10px}.chart{width:100%}.legend{display:flex;gap:18px;color:var(--muted);margin-top:12px;flex-wrap:wrap}.legend.wrap span{display:inline-flex;align-items:center;gap:6px}.swatch{width:12px;height:12px;border-radius:3px;display:inline-block}.empty{text-align:center;color:var(--muted);padding:60px 20px}.muted{color:var(--muted)}.foot{text-align:center;color:var(--muted);margin-top:34px;font-size:12px}.uplot,.u-title,.u-legend{color:var(--text)}.u-legend .u-marker{border-radius:2px}.profile{background:var(--panel);border:1px solid var(--border);border-radius:12px;padding:20px 22px}.profile .summary{font-size:15px;margin:0 0 12px}.chips{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 14px}.chip{border:1px solid var(--border);background:var(--panel-2);color:var(--text);border-radius:999px;padding:4px 12px;font-size:12.5px;cursor:default}.chip.kind{color:var(--accent);border-color:color-mix(in srgb,var(--accent) 40%,var(--border))}.run-select{background:var(--panel-2);color:var(--text);border:1px solid var(--border);border-radius:6px;padding:4px 8px;font:inherit}.outline-panel{background:var(--panel);border:1px solid var(--border);border-radius:12px;padding:14px 18px 22px}.outline-toolbar{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:10px;padding-bottom:12px;border-bottom:1px solid var(--border);margin-bottom:14px}.breadcrumb{display:flex;align-items:center;flex-wrap:wrap;gap:2px;font-size:13px;min-height:26px}.breadcrumb.muted{color:var(--muted);font-size:12.5px}.crumb{background:none;border:none;color:var(--accent);font:inherit;padding:2px 4px;border-radius:5px;cursor:pointer}.crumb:hover{background:var(--panel-2)}.crumb.current{color:var(--text);font-weight:600;cursor:default}.crumb-sep{color:var(--muted);padding:0 2px}.outline-actions{display:flex;align-items:center;gap:8px}.search{background:var(--panel-2);color:var(--text);border:1px solid var(--border);border-radius:8px;padding:6px 10px;font:inherit;font-size:13px;width:240px}.search:focus{outline:none;border-color:var(--accent)}.ghost-btn{background:none;border:1px solid var(--border);color:var(--muted);border-radius:6px;padding:5px 10px;font-size:12.5px;cursor:pointer}.ghost-btn:hover{color:var(--text);border-color:var(--accent)}.zoom-head{margin:2px 0 12px}.zoom-title{margin:0;font-size:22px;letter-spacing:-.3px}.zoom-summary{margin:6px 0 0;color:var(--muted);max-width:72ch}.zoom-head .files{margin-top:8px}.outline{display:flex;flex-direction:column}.node .children{margin-left:13px;padding-left:22px;border-left:1px solid var(--border)}.row{display:flex;align-items:flex-start;gap:2px;padding:3px 6px 3px 0;border-radius:7px;cursor:default}.row:hover{background:color-mix(in srgb,var(--panel-2) 70%,transparent)}.row.selected{background:color-mix(in srgb,var(--accent) 14%,transparent)}.row.match .title{color:var(--accent)}.node-text mark{background:color-mix(in srgb,var(--accent) 32%,transparent);color:inherit;border-radius:3px;padding:0 1px}.disclosure{flex:none;width:18px;height:22px;background:none;border:none;color:var(--muted);font-size:11px;line-height:22px;padding:0;cursor:pointer;transition:transform .12s ease;transform-origin:45% 50%;visibility:hidden}.node:hover>.row>.disclosure,.row.selected>.disclosure{visibility:visible}.disclosure.open{transform:rotate(90deg)}.disclosure.spacer{cursor:default}.dot{flex:none;width:18px;height:22px;background:none;border:none;padding:0;cursor:pointer;display:inline-flex;align-items:center;justify-content:center}.dot span{width:7px;height:7px;border-radius:50%;background:var(--muted);box-shadow:0 0 0 0 transparent;transition:box-shadow .12s ease,background .12s ease}.dot.loaded span{box-shadow:0 0 0 4px color-mix(in srgb,var(--muted) 28%,transparent)}.dot:hover span{background:var(--accent);box-shadow:0 0 0 4px color-mix(in srgb,var(--accent) 30%,transparent)}.node-text{min-width:0;padding:1px 0;line-height:20px}.node-text .title{font-weight:600}.node-text .summary{color:var(--muted);margin-left:8px}.node-text .summary:before{content:"— "}.kind-badge{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:10.5px;color:var(--muted);background:var(--panel-2);border:1px solid var(--border);border-radius:5px;padding:0 5px;margin-left:8px;vertical-align:1px}.count-badge{font-size:11px;color:var(--muted);background:var(--panel-2);border-radius:999px;padding:0 7px;margin-left:8px;vertical-align:1px}.files{display:inline-flex;flex-wrap:wrap;gap:6px;margin-left:8px}code.file{font-size:11.5px;color:color-mix(in srgb,var(--accent) 75%,var(--text))}.notes{background:var(--panel);border:1px solid var(--border);border-radius:12px;padding:16px 20px}.notes h2{margin:0 0 8px;font-size:15px}.notes p{margin:0;color:var(--muted)}@media (max-width: 640px){.outline-toolbar{flex-direction:column;align-items:stretch}.search{width:100%}.node .children{padding-left:14px}}:root{--prio-critical: #f85149;--prio-high: #f0883e;--prio-medium: #d29922;--prio-low: #58a6ff}:root[data-theme=light]{--prio-critical: #cf222e;--prio-high: #bc4c00;--prio-medium: #9a6700;--prio-low: #0969da}.priority-badge{font-size:10.5px;font-weight:700;text-transform:uppercase;letter-spacing:.4px;border-radius:999px;padding:0 8px;margin-left:8px;border:1px solid transparent;vertical-align:1px}.priority-badge.prio-critical{color:var(--prio-critical);border-color:color-mix(in srgb,var(--prio-critical) 45%,var(--border));background:color-mix(in srgb,var(--prio-critical) 12%,var(--panel-2))}.priority-badge.prio-high{color:var(--prio-high);border-color:color-mix(in srgb,var(--prio-high) 45%,var(--border));background:color-mix(in srgb,var(--prio-high) 12%,var(--panel-2))}.priority-badge.prio-medium{color:var(--prio-medium);border-color:color-mix(in srgb,var(--prio-medium) 45%,var(--border));background:color-mix(in srgb,var(--prio-medium) 12%,var(--panel-2))}.priority-badge.prio-low{color:var(--prio-low);border-color:color-mix(in srgb,var(--prio-low) 45%,var(--border));background:color-mix(in srgb,var(--prio-low) 12%,var(--panel-2))}.priority-bar{display:flex;align-items:center;flex-wrap:wrap;gap:8px;padding-bottom:12px;margin-bottom:12px;border-bottom:1px solid var(--border)}.priority-total{font-size:12.5px;margin-right:4px}.priority-chip{font:inherit;font-size:12px;border-radius:999px;padding:3px 12px;border:1px solid var(--border);background:var(--panel-2);color:var(--muted);cursor:pointer}.priority-chip b{font-weight:700}.priority-chip:disabled{opacity:.45;cursor:default}.priority-chip.prio-critical:not(:disabled){color:var(--prio-critical)}.priority-chip.prio-high:not(:disabled){color:var(--prio-high)}.priority-chip.prio-medium:not(:disabled){color:var(--prio-medium)}.priority-chip.prio-low:not(:disabled){color:var(--prio-low)}.priority-chip.on.prio-critical{border-color:var(--prio-critical);background:color-mix(in srgb,var(--prio-critical) 15%,var(--panel-2))}.priority-chip.on.prio-high{border-color:var(--prio-high);background:color-mix(in srgb,var(--prio-high) 15%,var(--panel-2))}.priority-chip.on.prio-medium{border-color:var(--prio-medium);background:color-mix(in srgb,var(--prio-medium) 15%,var(--panel-2))}.priority-chip.on.prio-low{border-color:var(--prio-low);background:color-mix(in srgb,var(--prio-low) 15%,var(--panel-2))}.case-detail{margin:4px 0 8px 44px;padding:10px 14px;border-left:2px solid var(--border);background:color-mix(in srgb,var(--panel-2) 55%,transparent);border-radius:0 8px 8px 0;display:grid;gap:8px}.case-block{font-size:13px}.case-label{display:block;font-size:10.5px;font-weight:700;text-transform:uppercase;letter-spacing:.5px;color:var(--muted);margin-bottom:2px}.case-block ul,.case-block ol{margin:0;padding-left:20px;display:grid;gap:2px}.case-block p{margin:0}.case-block.expected p{color:var(--text);font-weight:500}
@@ -0,0 +1,31 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <script>
7
+ (function () {
8
+ try {
9
+ var t = localStorage.getItem("edsger-theme");
10
+ if (t !== "light" && t !== "dark") {
11
+ t =
12
+ window.matchMedia &&
13
+ window.matchMedia("(prefers-color-scheme: light)").matches
14
+ ? "light"
15
+ : "dark";
16
+ }
17
+ document.documentElement.setAttribute("data-theme", t);
18
+ } catch (e) {
19
+ document.documentElement.setAttribute("data-theme", "dark");
20
+ }
21
+ })();
22
+ </script>
23
+ <title>Edsger — Test Cases</title>
24
+ <!-- __EDSGER_TESTCASES__ is injected here when exported as a single self-contained file. -->
25
+ <script type="module" crossorigin src="./assets/testcases-DaNbQxip.js"></script>
26
+ <link rel="stylesheet" crossorigin href="./assets/testcases-f2mIbfYU.css">
27
+ </head>
28
+ <body>
29
+ <div id="app"></div>
30
+ </body>
31
+ </html>
@@ -0,0 +1,32 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <script>
7
+ (function () {
8
+ try {
9
+ var t = localStorage.getItem("edsger-theme");
10
+ if (t !== "light" && t !== "dark") {
11
+ t =
12
+ window.matchMedia &&
13
+ window.matchMedia("(prefers-color-scheme: light)").matches
14
+ ? "light"
15
+ : "dark";
16
+ }
17
+ document.documentElement.setAttribute("data-theme", t);
18
+ } catch (e) {
19
+ document.documentElement.setAttribute("data-theme", "dark");
20
+ }
21
+ })();
22
+ </script>
23
+ <title>Edsger — Test Cases</title>
24
+ <!-- __EDSGER_TESTCASES__ is injected here when exported as a single self-contained file. -->
25
+ <script type="module" crossorigin>(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))l(i);new MutationObserver(i=>{for(const r of i)if(r.type==="childList")for(const c of r.addedNodes)c.tagName==="LINK"&&c.rel==="modulepreload"&&l(c)}).observe(document,{childList:!0,subtree:!0});function n(i){const r={};return i.integrity&&(r.integrity=i.integrity),i.referrerPolicy&&(r.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?r.credentials="include":i.crossOrigin==="anonymous"?r.credentials="omit":r.credentials="same-origin",r}function l(i){if(i.ep)return;i.ep=!0;const r=n(i);fetch(i.href,r)}})();var ce,b,tt,R,Re,nt,rt,fe,ee,G,lt,ke,me,ge,le={},ie=[],xt=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,_e=Array.isArray;function M(e,t){for(var n in t)e[n]=t[n];return e}function we(e){e&&e.parentNode&&e.parentNode.removeChild(e)}function St(e,t,n){var l,i,r,c={};for(r in t)r=="key"?l=t[r]:r=="ref"?i=t[r]:c[r]=t[r];if(arguments.length>2&&(c.children=arguments.length>3?ce.call(arguments,2):n),typeof e=="function"&&e.defaultProps!=null)for(r in e.defaultProps)c[r]===void 0&&(c[r]=e.defaultProps[r]);return te(e,c,l,i,null)}function te(e,t,n,l,i){var r={type:e,props:t,key:n,ref:l,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:i??++tt,__i:-1,__u:0};return i==null&&b.vnode!=null&&b.vnode(r),r}function ae(e){return e.children}function ne(e,t){this.props=e,this.context=t}function q(e,t){if(t==null)return e.__?q(e.__,e.__i+1):null;for(var n;t<e.__k.length;t++)if((n=e.__k[t])!=null&&n.__e!=null)return n.__e;return typeof e.type=="function"?q(e):null}function Et(e){if(e.__P&&e.__d){var t=e.__v,n=t.__e,l=[],i=[],r=M({},t);r.__v=t.__v+1,b.vnode&&b.vnode(r),xe(e.__P,r,t,e.__n,e.__P.namespaceURI,32&t.__u?[n]:null,l,n??q(t),!!(32&t.__u),i),r.__v=t.__v,r.__.__k[r.__i]=r,ct(l,r,i),t.__e=t.__=null,r.__e!=n&&it(r)}}function it(e){if((e=e.__)!=null&&e.__c!=null)return e.__e=e.__c.base=null,e.__k.some(function(t){if(t!=null&&t.__e!=null)return e.__e=e.__c.base=t.__e}),it(e)}function ze(e){(!e.__d&&(e.__d=!0)&&R.push(e)&&!se.__r++||Re!=b.debounceRendering)&&((Re=b.debounceRendering)||nt)(se)}function se(){try{for(var e,t=1;R.length;)R.length>t&&R.sort(rt),e=R.shift(),t=R.length,Et(e)}finally{R.length=se.__r=0}}function st(e,t,n,l,i,r,c,a,d,_,f){var v,s,h,y,$,p,x,m=l&&l.__k||ie,g=t.length;for(d=Ct(n,t,m,d,g),v=0;v<g;v++)(h=n.__k[v])!=null&&(s=h.__i!=-1&&m[h.__i]||le,h.__i=v,p=xe(e,h,s,i,r,c,a,d,_,f),y=h.__e,h.ref&&s.ref!=h.ref&&(s.ref&&Se(s.ref,null,h),f.push(h.ref,h.__c||y,h)),$==null&&y!=null&&($=y),(x=!!(4&h.__u))||s.__k===h.__k?(d=ot(h,d,e,x),x&&s.__e&&(s.__e=null)):typeof h.type=="function"&&p!==void 0?d=p:y&&(d=y.nextSibling),h.__u&=-7);return n.__e=$,d}function Ct(e,t,n,l,i){var r,c,a,d,_,f=n.length,v=f,s=0;for(e.__k=new Array(i),r=0;r<i;r++)(c=t[r])!=null&&typeof c!="boolean"&&typeof c!="function"?(typeof c=="string"||typeof c=="number"||typeof c=="bigint"||c.constructor==String?c=e.__k[r]=te(null,c,null,null,null):_e(c)?c=e.__k[r]=te(ae,{children:c},null,null,null):c.constructor===void 0&&c.__b>0?c=e.__k[r]=te(c.type,c.props,c.key,c.ref?c.ref:null,c.__v):e.__k[r]=c,d=r+s,c.__=e,c.__b=e.__b+1,a=null,(_=c.__i=$t(c,n,d,v))!=-1&&(v--,(a=n[_])&&(a.__u|=2)),a==null||a.__v==null?(_==-1&&(i>f?s--:i<f&&s++),typeof c.type!="function"&&(c.__u|=4)):_!=d&&(_==d-1?s--:_==d+1?s++:(_>d?s--:s++,c.__u|=4))):e.__k[r]=null;if(v)for(r=0;r<f;r++)(a=n[r])!=null&&!(2&a.__u)&&(a.__e==l&&(l=q(a)),at(a,a));return l}function ot(e,t,n,l){var i,r;if(typeof e.type=="function"){for(i=e.__k,r=0;i&&r<i.length;r++)i[r]&&(i[r].__=e,t=ot(i[r],t,n,l));return t}e.__e!=t&&(l&&(t&&e.type&&!t.parentNode&&(t=q(e)),n.insertBefore(e.__e,t||null)),t=e.__e);do t=t&&t.nextSibling;while(t!=null&&t.nodeType==8);return t}function $t(e,t,n,l){var i,r,c,a=e.key,d=e.type,_=t[n],f=_!=null&&(2&_.__u)==0;if(_===null&&a==null||f&&a==_.key&&d==_.type)return n;if(l>(f?1:0)){for(i=n-1,r=n+1;i>=0||r<t.length;)if((_=t[c=i>=0?i--:r++])!=null&&!(2&_.__u)&&a==_.key&&d==_.type)return c}return-1}function Oe(e,t,n){t[0]=="-"?e.setProperty(t,n??""):e[t]=n==null?"":typeof n!="number"||xt.test(t)?n:n+"px"}function X(e,t,n,l,i){var r,c;e:if(t=="style")if(typeof n=="string")e.style.cssText=n;else{if(typeof l=="string"&&(e.style.cssText=l=""),l)for(t in l)n&&t in n||Oe(e.style,t,"");if(n)for(t in n)l&&n[t]==l[t]||Oe(e.style,t,n[t])}else if(t[0]=="o"&&t[1]=="n")r=t!=(t=t.replace(lt,"$1")),c=t.toLowerCase(),t=c in e||t=="onFocusOut"||t=="onFocusIn"?c.slice(2):t.slice(2),e.l||(e.l={}),e.l[t+r]=n,n?l?n[G]=l[G]:(n[G]=ke,e.addEventListener(t,r?ge:me,r)):e.removeEventListener(t,r?ge:me,r);else{if(i=="http://www.w3.org/2000/svg")t=t.replace(/xlink(H|:h)/,"h").replace(/sName$/,"s");else if(t!="width"&&t!="height"&&t!="href"&&t!="list"&&t!="form"&&t!="tabIndex"&&t!="download"&&t!="rowSpan"&&t!="colSpan"&&t!="role"&&t!="popover"&&t in e)try{e[t]=n??"";break e}catch{}typeof n=="function"||(n==null||n===!1&&t[4]!="-"?e.removeAttribute(t):e.setAttribute(t,t=="popover"&&n==1?"":n))}}function je(e){return function(t){if(this.l){var n=this.l[t.type+e];if(t[ee]==null)t[ee]=ke++;else if(t[ee]<n[G])return;return n(b.event?b.event(t):t)}}}function xe(e,t,n,l,i,r,c,a,d,_){var f,v,s,h,y,$,p,x,m,g,U,P,D,F,I,B,T=t.type;if(t.constructor!==void 0)return null;128&n.__u&&(d=!!(32&n.__u),r=[a=t.__e=n.__e]),(f=b.__b)&&f(t);e:if(typeof T=="function"){v=c.length;try{if(m=t.props,g=T.prototype&&T.prototype.render,U=(f=T.contextType)&&l[f.__c],P=f?U?U.props.value:f.__:l,n.__c?x=(s=t.__c=n.__c).__=s.__E:(g?t.__c=s=new T(m,P):(t.__c=s=new ne(m,P),s.constructor=T,s.render=Pt),U&&U.sub(s),s.state||(s.state={}),s.__n=l,h=s.__d=!0,s.__h=[],s._sb=[]),g&&s.__s==null&&(s.__s=s.state),g&&T.getDerivedStateFromProps!=null&&(s.__s==s.state&&(s.__s=M({},s.__s)),M(s.__s,T.getDerivedStateFromProps(m,s.__s))),y=s.props,$=s.state,s.__v=t,h)g&&T.getDerivedStateFromProps==null&&s.componentWillMount!=null&&s.componentWillMount(),g&&s.componentDidMount!=null&&s.__h.push(s.componentDidMount);else{if(g&&T.getDerivedStateFromProps==null&&m!==y&&s.componentWillReceiveProps!=null&&s.componentWillReceiveProps(m,P),t.__v==n.__v||!s.__e&&s.shouldComponentUpdate!=null&&s.shouldComponentUpdate(m,s.__s,P)===!1){t.__v!=n.__v&&(s.props=m,s.state=s.__s,s.__d=!1),t.__e=n.__e,t.__k=n.__k,t.__k.some(function(H){H&&(H.__=t)}),ie.push.apply(s.__h,s._sb),s._sb=[],s.__h.length&&c.push(s);break e}s.componentWillUpdate!=null&&s.componentWillUpdate(m,s.__s,P),g&&s.componentDidUpdate!=null&&s.__h.push(function(){s.componentDidUpdate(y,$,p)})}if(s.context=P,s.props=m,s.__P=e,s.__e=!1,D=b.__r,F=0,g)s.state=s.__s,s.__d=!1,D&&D(t),f=s.render(s.props,s.state,s.context),ie.push.apply(s.__h,s._sb),s._sb=[];else do s.__d=!1,D&&D(t),f=s.render(s.props,s.state,s.context),s.state=s.__s;while(s.__d&&++F<25);s.state=s.__s,s.getChildContext!=null&&(l=M(M({},l),s.getChildContext())),g&&!h&&s.getSnapshotBeforeUpdate!=null&&(p=s.getSnapshotBeforeUpdate(y,$)),I=f!=null&&f.type===ae&&f.key==null?_t(f.props.children):f,a=st(e,_e(I)?I:[I],t,n,l,i,r,c,a,d,_),s.base=t.__e,t.__u&=-161,s.__h.length&&c.push(s),x&&(s.__E=s.__=null)}catch(H){if(c.length=v,t.__v=null,d||r!=null)if(H.then){for(t.__u|=d?160:128;a&&a.nodeType==8&&a.nextSibling;)a=a.nextSibling;r!=null&&(r[r.indexOf(a)]=null),t.__e=a}else{if(r!=null)for(B=r.length;B--;)we(r[B]);ve(t)}else t.__e=n.__e,!t.__k&&n.__k&&(t.__k=n.__k),H.then||ve(t);b.__e(H,t,n)}}else r==null&&t.__v==n.__v?(t.__k=n.__k,t.__e=n.__e):a=t.__e=Tt(n.__e,t,n,l,i,r,c,d,_);return(f=b.diffed)&&f(t),128&t.__u?void 0:a}function ve(e){e&&(e.__c&&(e.__c.__e=!0),e.__k&&e.__k.some(ve))}function ct(e,t,n){for(var l=0;l<n.length;l++)Se(n[l],n[++l],n[++l]);b.__c&&b.__c(t,e),e.some(function(i){try{e=i.__h,i.__h=[],e.some(function(r){r.call(i)})}catch(r){b.__e(r,i.__v)}})}function _t(e){return typeof e!="object"||e==null||e.__b>0?e:_e(e)?e.map(_t):e.constructor!==void 0?null:M({},e)}function Tt(e,t,n,l,i,r,c,a,d){var _,f,v,s,h,y,$,p=n.props||le,x=t.props,m=t.type;if(m=="svg"?i="http://www.w3.org/2000/svg":m=="math"?i="http://www.w3.org/1998/Math/MathML":i||(i="http://www.w3.org/1999/xhtml"),r!=null){for(_=0;_<r.length;_++)if((h=r[_])&&"setAttribute"in h==!!m&&(m?h.localName==m:h.nodeType==3)){e=h,r[_]=null;break}}if(e==null){if(m==null)return document.createTextNode(x);e=document.createElementNS(i,m,x.is&&x),a&&(b.__m&&b.__m(t,r),a=!1),r=null}if(m==null)p===x||a&&e.data==x||(e.data=x);else{if(r=m=="textarea"&&x.defaultValue!=null?null:r&&ce.call(e.childNodes),!a&&r!=null)for(p={},_=0;_<e.attributes.length;_++)p[(h=e.attributes[_]).name]=h.value;for(_ in p)h=p[_],_=="dangerouslySetInnerHTML"?v=h:_=="children"||_ in x||_=="value"&&"defaultValue"in x||_=="checked"&&"defaultChecked"in x||X(e,_,null,h,i);for(_ in x)h=x[_],_=="children"?s=h:_=="dangerouslySetInnerHTML"?f=h:_=="value"?y=h:_=="checked"?$=h:a&&typeof h!="function"||p[_]===h||X(e,_,h,p[_],i);if(f)a||v&&(f.__html==v.__html||f.__html==e.innerHTML)||(e.innerHTML=f.__html),t.__k=[];else if(v&&(e.innerHTML=""),st(t.type=="template"?e.content:e,_e(s)?s:[s],t,n,l,m=="foreignObject"?"http://www.w3.org/1999/xhtml":i,r,c,r?r[0]:n.__k&&q(n,0),a,d),r!=null)for(_=r.length;_--;)we(r[_]);a&&m!="textarea"||(_="value",m=="progress"&&y==null?e.removeAttribute("value"):y!=null&&(y!==e[_]||m=="progress"&&!y||m=="option"&&y!=p[_])&&X(e,_,y,p[_],i),_="checked",$!=null&&$!=e[_]&&X(e,_,$,p[_],i))}return e}function Se(e,t,n){try{if(typeof e=="function"){var l=typeof e.__u=="function";l&&e.__u(),l&&t==null||(e.__u=e(t))}else e.current=t}catch(i){b.__e(i,n)}}function at(e,t,n){var l,i;if(b.unmount&&b.unmount(e),(l=e.ref)&&(l.current&&l.current!=e.__e||Se(l,null,t)),(l=e.__c)!=null){if(l.componentWillUnmount)try{l.componentWillUnmount()}catch(r){b.__e(r,t)}l.base=l.__P=l.__n=null}if(l=e.__k)for(i=0;i<l.length;i++)l[i]&&at(l[i],t,n||typeof e.type!="function");n||we(e.__e),e.__c=e.__=e.__e=void 0}function Pt(e,t,n){return this.constructor(e,n)}function At(e,t,n){var l,i,r,c;t==document&&(t=document.documentElement),b.__&&b.__(e,t),i=(l=!1)?null:t.__k,r=[],c=[],xe(t,e=t.__k=St(ae,null,[e]),i||le,le,t.namespaceURI,i?null:t.firstChild?ce.call(t.childNodes):null,r,i?i.__e:t.firstChild,l,c),ct(r,e,c),e.props.children=null}ce=ie.slice,b={__e:function(e,t,n,l){for(var i,r,c;t=t.__;)if((i=t.__c)&&!i.__)try{if((r=i.constructor)&&r.getDerivedStateFromError!=null&&(i.setState(r.getDerivedStateFromError(e)),c=i.__d),i.componentDidCatch!=null&&(i.componentDidCatch(e,l||{}),c=i.__d),c)return i.__E=i}catch(a){e=a}throw e}},tt=0,ne.prototype.setState=function(e,t){var n;n=this.__s!=null&&this.__s!=this.state?this.__s:this.__s=M({},this.state),typeof e=="function"&&(e=e(M({},n),this.props)),e&&M(n,e),e!=null&&this.__v&&(t&&this._sb.push(t),ze(this))},ne.prototype.forceUpdate=function(e){this.__v&&(this.__e=!0,e&&this.__h.push(e),ze(this))},ne.prototype.render=ae,R=[],nt=typeof Promise=="function"?Promise.prototype.then.bind(Promise.resolve()):setTimeout,rt=function(e,t){return e.__v.__b-t.__v.__b},se.__r=0,fe=Math.random().toString(8),ee="__d"+fe,G="__a"+fe,lt=/(PointerCapture)$|Capture$/i,ke=0,me=je(!1),ge=je(!0);var Nt=0;function o(e,t,n,l,i,r){t||(t={});var c,a,d=t;if("ref"in d)for(a in d={},t)a=="ref"?c=t[a]:d[a]=t[a];var _={type:e,props:d,key:n,ref:c,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:--Nt,__i:-1,__u:0,__source:i,__self:r};if(typeof e=="function"&&(c=e.defaultProps))for(a in c)d[a]===void 0&&(d[a]=c[a]);return b.vnode&&b.vnode(_),_}var K,S,pe,qe,Q=0,ut=[],E=b,Be=E.__b,We=E.__r,Ve=E.diffed,Ge=E.__c,Ke=E.unmount,Qe=E.__;function Ee(e,t){E.__h&&E.__h(S,e,Q||t),Q=0;var n=S.__H||(S.__H={__:[],__h:[]});return e>=n.__.length&&n.__.push({}),n.__[e]}function L(e){return Q=1,Dt(pt,e)}function Dt(e,t,n){var l=Ee(K++,2);if(l.t=e,!l.__c&&(l.__=[pt(void 0,t),function(a){var d=l.__N?l.__N[0]:l.__[0],_=l.t(d,a);d!==_&&(l.__N=[_,l.__[1]],l.__c.setState({}))}],l.__c=S,!S.__f)){var i=function(a,d,_){if(!l.__c.__H)return!0;var f=!1,v=l.__c.props!==a;if(l.__c.__H.__.some(function(h){if(h.__N){f=!0;var y=h.__[0];h.__=h.__N,h.__N=void 0,y!==h.__[0]&&(v=!0)}}),r){var s=r.call(this,a,d,_);return f?s||v:s}return!f||v};S.__f=!0;var r=S.shouldComponentUpdate,c=S.componentWillUpdate;S.componentWillUpdate=function(a,d,_){if(this.__e){var f=r;r=void 0,i(a,d,_),r=f}c&&c.call(this,a,d,_)},S.shouldComponentUpdate=i}return l.__N||l.__}function O(e,t){var n=Ee(K++,3);!E.__s&&ft(n.__H,t)&&(n.__=e,n.u=t,S.__H.__h.push(n))}function dt(e){return Q=5,N(function(){return{current:e}},[])}function N(e,t){var n=Ee(K++,7);return ft(n.__H,t)&&(n.__=e(),n.__H=t,n.__h=e),n.__}function V(e,t){return Q=8,N(function(){return e},t)}function Je(){for(var e;e=ut.shift();){var t=e.__H;if(e.__P&&t)try{t.__h.some(ye),t.__h.some(ht),t.__h=[]}catch(n){t.__h=[],E.__e(n,e.__v)}}}E.__b=function(e){S=null,Be&&Be(e)},E.__=function(e,t){e&&t.__k&&t.__k.__m&&(e.__m=t.__k.__m),Qe&&Qe(e,t)},E.__r=function(e){We&&We(e),K=0;var t=(S=e.__c).__H;t&&(pe===S?(t.__h=[],S.__h=[],t.__.some(function(n){n.__N&&(n.__=n.__N),n.u=n.__N=void 0})):(t.__h.length&&Je(),K=0)),pe=S},E.diffed=function(e){Ve&&Ve(e);var t=e.__c;t&&t.__H&&(t.__H.__h.length&&(ut.push(t)!==1&&qe===E.requestAnimationFrame||((qe=E.requestAnimationFrame)||It)(Je)),t.__H.__.some(function(n){n.u&&(n.__H=n.u,n.u=void 0)})),pe=S=null},E.__c=function(e,t){t.some(function(n){try{n.__h.some(ye),n.__h=n.__h.filter(function(l){return!l.__||ht(l)})}catch(l){t.some(function(i){i.__h&&(i.__h=[])}),t=[],E.__e(l,n.__v)}}),Ge&&Ge(e,t)},E.unmount=function(e){Ke&&Ke(e);var t,n=e.__c;n&&n.__H&&(n.__H.__.some(function(l){try{ye(l)}catch(i){t=i}}),n.__H=void 0,t&&E.__e(t,n.__v))};var Ye=typeof requestAnimationFrame=="function";function It(e){var t,n=function(){clearTimeout(l),Ye&&cancelAnimationFrame(t),setTimeout(e)},l=setTimeout(n,35);Ye&&(t=requestAnimationFrame(n))}function ye(e){var t=S,n=e.__c;typeof n=="function"&&(e.__c=void 0,n()),S=t}function ht(e){var t=S;e.__c=e.__(),S=t}function ft(e,t){return!e||e.length!==t.length||t.some(function(n,l){return n!==e[l]})}function pt(e,t){return typeof t=="function"?t(e):t}async function Ht(){if(window.__EDSGER_TESTCASES__)return Ze(window.__EDSGER_TESTCASES__);const e=await fetch("./edsger-testcases.json",{cache:"no-store"});if(!e.ok)throw new Error(`Could not load edsger-testcases.json (HTTP ${e.status})`);return Ze(await e.json())}function Ze(e){const t=[...e.history??[]].sort((n,l)=>n.generatedAt<l.generatedAt?-1:n.generatedAt>l.generatedAt?1:0);return{repo:e.repo,latest:e.latest??null,history:t,runs:e.runs??{}}}function Lt(e){const t=new Map,n=(l,i)=>{t.set(l.id,{node:l,parent:i});for(const r of l.children)n(r,l.id)};return n(e,null),t}function Mt(e,t){const n=new Set,l=i=>{let r=t(i);for(const c of i.children)l(c)&&(r=!0);return r&&n.add(i.id),r};return l(e),n}function mt(e,t,n){return e.children.length?t?e.children.some(l=>t.has(l.id)):n.has(e.id):!1}function Ut(e,t,n){const l=[],i=r=>{for(const c of r.children)t&&!t.has(c.id)||(l.push(c.id),mt(c,t,n)&&i(c))};return i(e),l}function Ft(e,t){if(!t)return[];const n=[];let l=t;for(;l;){const i=e.get(l);if(!i)break;n.unshift(i.node),l=i.parent}return n}function Rt(e,t){if(!t)return[{text:e,hit:!1}];const n=e.toLowerCase(),l=[];let i=0;for(;;){const r=n.indexOf(t,i);if(r===-1)break;r>i&&l.push({text:e.slice(i,r),hit:!1}),l.push({text:e.slice(r,r+t.length),hit:!0}),i=r+t.length}return i<e.length&&l.push({text:e.slice(i),hit:!1}),l.length?l:[{text:e,hit:!1}]}const zt=["critical","high","medium","low"];function ue(e){return e.steps.length>0||!!e.expected}function oe(e){return e.priority??"medium"}function Ce(e){return(ue(e)?1:0)+e.children.reduce((t,n)=>t+Ce(n),0)}function Ot(e){const t={critical:0,high:0,medium:0,low:0},n=l=>{ue(l)&&t[oe(l)]++,l.children.forEach(n)};return n(e),t}function jt(e,t){return[e.title,e.summary,...e.files,...e.preconditions,...e.steps,e.expected??""].join(`
26
+ `).toLowerCase().includes(t)}function qt(e,t){return n=>!(e&&!jt(n,e)||t.size&&!(ue(n)&&t.has(oe(n))))}function $e(e){return e.preconditions.length>0||e.steps.length>0||!!e.expected}function re(e){return e.children.length>0||$e(e)}function j({text:e,query:t}){return t?Rt(e,t).map((n,l)=>n.hit?o("mark",{children:n.text},l):n.text):e}function gt({node:e,query:t}){return o("div",{class:"case-detail",children:[e.preconditions.length?o("div",{class:"case-block",children:[o("span",{class:"case-label",children:"Preconditions"}),o("ul",{children:e.preconditions.map((n,l)=>o("li",{children:o(j,{text:n,query:t})},l))})]}):null,e.steps.length?o("div",{class:"case-block",children:[o("span",{class:"case-label",children:"Steps"}),o("ol",{children:e.steps.map((n,l)=>o("li",{children:o(j,{text:n,query:t})},l))})]}):null,e.expected?o("div",{class:"case-block expected",children:[o("span",{class:"case-label",children:"Expected"}),o("p",{children:o(j,{text:e.expected,query:t})})]}):null]})}function Bt({node:e,view:t,onToggle:n,onZoom:l,onSelect:i}){const r=e.children.length>0,c=re(e),a=t.isExpanded(e),d=t.selectedId===e.id,_=dt(null);O(()=>{var s;d&&((s=_.current)==null||s.scrollIntoView({block:"nearest"}))},[d]);const f=["row",d?"selected":"",t.isMatch(e)?"match":""].filter(Boolean).join(" "),v=r&&!a?Ce(e):0;return o("div",{class:"node","data-kind":e.kind,children:[o("div",{class:f,ref:_,onClick:()=>i(e.id),children:[c?o("button",{class:`disclosure ${a?"open":""}`,title:a?"Collapse":"Expand",onClick:s=>{s.stopPropagation(),i(e.id),n(e.id)},children:"▸"}):o("span",{class:"disclosure spacer"}),o("button",{class:`dot ${r&&!a?"loaded":""}`,title:"Zoom in",onClick:s=>{s.stopPropagation(),l(e.id)},children:o("span",{})}),o("div",{class:"node-text",children:[o("span",{class:"title",onDblClick:()=>l(e.id),children:o(j,{text:e.title,query:t.query})}),ue(e)?o("span",{class:`priority-badge prio-${oe(e)}`,children:oe(e)}):e.kind&&e.kind!=="topic"?o("span",{class:"kind-badge",children:e.kind}):null,v?o("span",{class:"count-badge",children:[v," case",v===1?"":"s"]}):null,e.summary?o("span",{class:"summary",children:o(j,{text:e.summary,query:t.query})}):null,e.files.length?o("span",{class:"files",children:e.files.map(s=>o("code",{class:"file",children:o(j,{text:s,query:t.query})},s))}):null]})]}),a&&$e(e)?o(gt,{node:e,query:t.query}):null,r&&a?o("div",{class:"children",children:o(vt,{nodes:e.children,view:t,onToggle:n,onZoom:l,onSelect:i})}):null]})}function vt({nodes:e,view:t,onToggle:n,onZoom:l,onSelect:i}){return o("div",{class:"outline",children:e.filter(r=>t.isVisible(r)).map(r=>o(Bt,{node:r,view:t,onToggle:n,onZoom:l,onSelect:i},r.id))})}const yt="edsger-theme",be=new Set;function Wt(){return typeof matchMedia<"u"&&matchMedia("(prefers-color-scheme: light)").matches?"light":"dark"}function Vt(){if(typeof document<"u"){const e=document.documentElement.getAttribute("data-theme");if(e==="light"||e==="dark")return e}try{const e=localStorage.getItem(yt);if(e==="light"||e==="dark")return e}catch{}return Wt()}let J=Vt();typeof document<"u"&&!document.documentElement.getAttribute("data-theme")&&document.documentElement.setAttribute("data-theme",J);function Gt(){return J}function Kt(e){J=e,typeof document<"u"&&document.documentElement.setAttribute("data-theme",e);try{localStorage.setItem(yt,e)}catch{}for(const t of be)t()}function Qt(){Kt(J==="dark"?"light":"dark")}function Jt(e){return be.add(e),()=>{be.delete(e)}}function Yt(){const[e,t]=L(J);return O(()=>Jt(()=>t(Gt())),[]),e}function Zt(){const e=Yt(),n=`Switch to ${e==="dark"?"light":"dark"} mode`;return o("button",{type:"button",class:"theme-toggle",title:n,"aria-label":n,onClick:()=>Qt(),children:o("span",{"aria-hidden":"true",children:e==="dark"?"☀":"☾"})})}function Xe(e){const t=new Date(e);return Number.isNaN(t.getTime())?e:t.toLocaleString(void 0,{year:"numeric",month:"short",day:"2-digit",hour:"2-digit",minute:"2-digit"})}function Xt(){var Ne;const[e,t]=L(null),[n,l]=L(null),[i,r]=L(null),[c,a]=L(null),[d,_]=L(new Set),[f,v]=L(null),[s,h]=L(""),[y,$]=L(new Set);O(()=>{Ht().then(t).catch(u=>l(u instanceof Error?u.message:String(u)))},[]);const p=N(()=>e?i&&e.runs[i]?e.runs[i]:e.latest:null,[e,i]),x=N(()=>e?[...e.history].reverse():[],[e]),m=N(()=>p?Lt(p.root):null,[p]);O(()=>{p&&(a(null),v(null),$(new Set),_(new Set(p.root.children.map(u=>u.id))))},[p]);const g=N(()=>p?c&&(m!=null&&m.get(c))?m.get(c).node:p.root:null,[p,m,c]),U=N(()=>m?Ft(m,c):[],[m,c]),P=s.trim().toLowerCase(),D=!!P||y.size>0,F=N(()=>qt(P,y),[P,y]),I=N(()=>g&&D?Mt(g,F):null,[g,D,F]),B=N(()=>({isVisible:u=>I?I.has(u.id):!0,isExpanded:u=>u.children.length?mt(u,I,d):d.has(u.id)||!!P&&F(u),isMatch:u=>D&&F(u),query:P,selectedId:f}),[I,d,P,F,D,f]),T=N(()=>g?Ut(g,I,d):[],[g,I,d]),H=V(u=>{_(w=>{const k=new Set(w);return k.has(u)?k.delete(u):k.add(u),k})},[]),bt=V(u=>{$(w=>{const k=new Set(w);return k.has(u)?k.delete(u):k.add(u),k})},[]),z=V(u=>{if(a(u),v(null),h(""),u&&(m!=null&&m.get(u))){const w=m.get(u).node;_(k=>{const C=new Set(k);C.add(u);for(const A of w.children)C.add(A.id);return C})}},[m]),kt=V(()=>{g&&_(u=>{const w=new Set(u),k=C=>{re(C)&&w.add(C.id),C.children.forEach(k)};return k(g),w})},[g]),wt=V(()=>{g&&_(u=>{const w=new Set(u),k=C=>{w.delete(C.id),C.children.forEach(k)};for(const C of g.children)k(C);return w})},[g]),Te=dt({index:m,flat:T,selected:f,expanded:d,zoomId:c});Te.current={index:m,flat:T,selected:f,expanded:d,zoomId:c},O(()=>{const u=w=>{var He,Le,Me,Ue,Fe;const{index:k,flat:C,selected:A,expanded:De,zoomId:Y}=Te.current,Z=w.target;if(Z&&(Z.tagName==="INPUT"||Z.tagName==="SELECT")){w.key==="Escape"&&Z.blur();return}if(!k||!C.length){w.key==="Escape"&&Y&&(w.preventDefault(),z(((He=k==null?void 0:k.get(Y))==null?void 0:He.parent)??null));return}const Ie=A?C.indexOf(A):-1;switch(w.key){case"ArrowDown":w.preventDefault(),v(C[Math.min(Ie+1,C.length-1)]??null);break;case"ArrowUp":w.preventDefault(),v(C[Math.max(Ie-1,0)]??null);break;case"ArrowRight":{if(!A)break;w.preventDefault();const W=(Le=k.get(A))==null?void 0:Le.node;W&&re(W)&&!De.has(A)&&H(A);break}case"ArrowLeft":{if(!A)break;w.preventDefault();const W=(Me=k.get(A))==null?void 0:Me.node;if(W&&re(W)&&De.has(A))H(A);else{const he=(Ue=k.get(A))==null?void 0:Ue.parent;he&&C.includes(he)&&v(he)}break}case"Enter":A&&(w.preventDefault(),z(A));break;case"Escape":Y&&(w.preventDefault(),z(((Fe=k.get(Y))==null?void 0:Fe.parent)??null));break}};return window.addEventListener("keydown",u),()=>window.removeEventListener("keydown",u)},[H,z]),O(()=>{f&&!T.includes(f)&&v(null)},[T,f]);const Pe=(e==null?void 0:e.repo)??(p==null?void 0:p.repo)??"",de=N(()=>g?Ot(g):null,[g]),Ae=N(()=>g?Ce(g):0,[g]);return o("div",{class:"app",children:[o("header",{class:"topbar",children:[o("div",{class:"brand",children:[o("span",{class:"logo",children:"edsger"}),o("span",{class:"subtitle",children:"test cases"})]}),o("div",{class:"topbar-actions",children:[Pe?o("div",{class:"repo",children:Pe}):null,o(Zt,{})]})]}),o("main",{class:"content",children:n?o("div",{class:"empty",children:[o("strong",{children:"Failed to load data."}),o("div",{class:"muted",children:n})]}):e?!p||!g?o("div",{class:"empty",children:["No test cases yet. Run ",o("code",{children:"edsger testcases"}),"."]}):o("div",{class:"stack",children:[c?null:o("section",{class:"profile",children:[o("p",{class:"summary",children:p.profile.summary}),p.profile.kinds.length?o("div",{class:"chips",children:p.profile.kinds.map(u=>o("span",{class:"chip kind",children:u},u))}):null,o("dl",{class:"facts",children:[o("div",{children:[o("dt",{children:"Languages"}),o("dd",{children:p.languages.join(", ")||"generic"})]}),o("div",{children:[o("dt",{children:"Test cases"}),o("dd",{children:[p.caseCount," · depth ",p.depth]})]}),o("div",{children:[o("dt",{children:"Commit"}),o("dd",{children:(Ne=p.git)!=null&&Ne.commit?o("code",{children:[p.git.commit,p.git.branch?` (${p.git.branch})`:"",p.git.dirty?" ✻":""]}):"—"})]}),o("div",{children:[o("dt",{children:"Generated"}),o("dd",{children:Xe(p.generatedAt)})]}),x.length>1?o("div",{children:[o("dt",{children:"Run"}),o("dd",{children:o("select",{class:"run-select",value:i??p.runId,onChange:u=>r(u.target.value),children:x.map(u=>o("option",{value:u.runId,children:[Xe(u.generatedAt)," · ",u.caseCount," cases"]},u.runId))})})]}):null]})]}),o("section",{class:"outline-panel",children:[o("div",{class:"outline-toolbar",children:[U.length?o("nav",{class:"breadcrumb",children:[o("button",{class:"crumb",onClick:()=>z(null),children:p.root.title}),U.slice(1,-1).map(u=>o("span",{children:[o("span",{class:"crumb-sep",children:"›"}),o("button",{class:"crumb",onClick:()=>z(u.id),children:u.title})]},u.id)),o("span",{class:"crumb-sep",children:"›"}),o("span",{class:"crumb current",children:g.title})]}):o("div",{class:"breadcrumb muted",children:"↑↓ ←→ navigate · Enter zoom · Esc back"}),o("div",{class:"outline-actions",children:[o("input",{class:"search",type:"search",placeholder:"Search titles, steps, expected, files…",value:s,onInput:u=>h(u.target.value)}),o("button",{class:"ghost-btn",onClick:kt,children:"Expand all"}),o("button",{class:"ghost-btn",onClick:wt,children:"Collapse all"})]})]}),de?o("div",{class:"priority-bar",children:[o("span",{class:"priority-total muted",children:[Ae," case",Ae===1?"":"s"]}),zt.map(u=>o("button",{class:`priority-chip prio-${u} ${y.has(u)?"on":""}`,disabled:de[u]===0,title:`Show only ${u}-priority cases`,onClick:()=>bt(u),children:[u," ",o("b",{children:de[u]})]},u)),y.size?o("button",{class:"ghost-btn",onClick:()=>$(new Set),children:"Clear filter"}):null]}):null,o("div",{class:"zoom-head",children:[o("h2",{class:"zoom-title",children:g.title}),g.summary?o("p",{class:"zoom-summary",children:g.summary}):null,g.files.length?o("div",{class:"files",children:g.files.map(u=>o("code",{class:"file",children:u},u))}):null,c&&$e(g)?o(gt,{node:g,query:""}):null]}),D&&!T.length?o("div",{class:"empty muted",children:["No test cases match",P?` “${s}”`:"",y.size?` with priority ${[...y].join("/")}`:"","."]}):o(vt,{nodes:g.children,view:B,onToggle:H,onZoom:z,onSelect:v})]}),p.notes&&!c?o("section",{class:"notes",children:[o("h2",{children:"Notes"}),o("p",{children:p.notes})]}):null]}):o("div",{class:"empty",children:"Loading…"})}),o("footer",{class:"foot",children:o("span",{children:"Generated by edsger"})})]})}const et=document.getElementById("app");et&&At(o(Xt,{}),et);</script>
27
+ <style rel="stylesheet" crossorigin>:root,:root[data-theme=dark]{--bg: #0d1117;--panel: #161b22;--panel-2: #1c2129;--border: #30363d;--text: #e6edf3;--muted: #8b949e;--accent: #58a6ff;--on-accent: #04101f;--chart-line: #e6edf3;--chart-axis: #8b949e;--chart-grid: #21262d;color-scheme:dark}:root[data-theme=light]{--bg: #ffffff;--panel: #f6f8fa;--panel-2: #eaeef2;--border: #d0d7de;--text: #1f2328;--muted: #59636e;--accent: #0969da;--on-accent: #ffffff;--chart-line: #1f2328;--chart-axis: #59636e;--chart-grid: #d8dee4;color-scheme:light}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--text);font:14px/1.5 -apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif}code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.9em;background:var(--panel-2);padding:1px 5px;border-radius:5px}.app{max-width:1040px;margin:0 auto;padding:0 20px 60px}.topbar{display:flex;align-items:baseline;justify-content:space-between;padding:22px 0 14px}.brand{display:flex;align-items:baseline;gap:10px}.logo{font-weight:800;font-size:22px;letter-spacing:-.5px}.subtitle{color:var(--muted)}.repo{color:var(--muted);font-family:ui-monospace,monospace}.topbar-actions{display:flex;align-items:center;gap:14px}.theme-toggle{display:inline-flex;align-items:center;justify-content:center;width:34px;height:30px;padding:0;background:var(--panel-2);border:1px solid var(--border);border-radius:8px;color:var(--text);font-size:15px;line-height:1;cursor:pointer}.theme-toggle:hover{border-color:var(--accent);color:var(--accent)}.tabs{display:flex;gap:4px;border-bottom:1px solid var(--border);margin-bottom:22px}.tab{background:none;border:none;border-bottom:2px solid transparent;color:var(--muted);padding:10px 14px;font-size:14px;cursor:pointer}.tab:hover{color:var(--text)}.tab.active{color:var(--text);border-bottom-color:var(--accent);font-weight:600}.stack{display:flex;flex-direction:column;gap:18px}.two-col{display:grid;grid-template-columns:1fr 1fr;gap:18px}@media (max-width: 720px){.two-col{grid-template-columns:1fr}}.card{background:var(--panel);border:1px solid var(--border);border-radius:12px;padding:18px 20px}.card-title{margin:0 0 14px;font-size:15px;font-weight:600}.hero{display:flex;gap:26px;align-items:center;background:var(--panel);border:1px solid var(--border);border-radius:12px;padding:22px}@media (max-width: 720px){.hero{flex-direction:column;align-items:flex-start}}.hero-meta{flex:1}.summary{margin:0 0 14px;font-size:15px}.facts{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px 18px;margin:0}.facts div{display:flex;flex-direction:column}.facts dt{color:var(--muted);font-size:12px;text-transform:uppercase;letter-spacing:.4px}.facts dd{margin:2px 0 0}.ring svg{display:block}.ring-track{fill:none;stroke:var(--border);stroke-width:12}.ring-value{fill:none;stroke-width:12;stroke-linecap:round;transition:stroke-dasharray .6s ease}.ring-score{font-size:34px;font-weight:800;text-anchor:middle}.ring-grade{font-size:12px;fill:var(--muted);text-anchor:middle}.bar-row{display:grid;grid-template-columns:220px 1fr 120px;align-items:center;gap:12px;padding:5px 0}@media (max-width: 620px){.bar-row{grid-template-columns:130px 1fr 70px}}.bar-label{color:var(--text)}.bar-track{background:var(--panel-2);border-radius:6px;height:10px;overflow:hidden}.bar-fill{height:100%;border-radius:6px;transition:width .5s ease}.bar-value{color:var(--muted);text-align:right;font-variant-numeric:tabular-nums}.list{margin:0;padding-left:18px}.list li{margin:4px 0}.list.good li::marker{color:#3fb950}.list.bad li::marker{color:#f85149}.recs{list-style:none;margin:0;padding:0}.recs li{padding:8px 0;border-bottom:1px solid var(--border)}.recs li:last-child{border-bottom:none}.pill{display:inline-block;font-size:11px;text-transform:uppercase;border-radius:20px;padding:2px 8px;margin-right:8px;font-weight:700}.pill.high{background:#6e2019;color:#ff7b72}.pill.medium{background:#5a4212;color:#e3b341}.pill.low{background:#22333b;color:#7ee2c8}:root[data-theme=light] .pill.high{background:#ffebe9;color:#cf222e}:root[data-theme=light] .pill.medium{background:#fff8c5;color:#9a6700}:root[data-theme=light] .pill.low{background:#dafbe1;color:#1a7f37}.run-picker{display:flex;align-items:center;gap:10px}.run-picker select,select{background:var(--panel-2);color:var(--text);border:1px solid var(--border);border-radius:8px;padding:6px 10px}.crit-list{display:flex;flex-direction:column;gap:6px}.crit{border:1px solid var(--border);border-radius:8px;padding:8px 12px;background:var(--panel-2)}.crit summary{display:flex;align-items:center;gap:10px;cursor:pointer;list-style:none}.crit summary::-webkit-details-marker{display:none}.score-chip{font-variant-numeric:tabular-nums;font-weight:700;color:#0d1117;border-radius:6px;padding:1px 8px;font-size:12px}.crit-title{font-weight:500}.crit-just{margin:10px 0 6px;color:var(--text)}.evidence{margin:0;padding-left:18px}.evidence li{margin:3px 0}.table-wrap{overflow-x:auto}table.history{width:100%;border-collapse:collapse;font-variant-numeric:tabular-nums}table.history th,table.history td{padding:7px 10px;border-bottom:1px solid var(--border);text-align:left;white-space:nowrap}table.history th{color:var(--muted);font-weight:600;font-size:12px}table.history .num{text-align:right}table.history .cat{color:var(--muted)}table.history .strong{font-weight:700}.up{color:#3fb950}.down{color:#f85149}:root[data-theme=light] .up,:root[data-theme=light] .list.good li::marker{color:#1a7f37}:root[data-theme=light] .down,:root[data-theme=light] .list.bad li::marker{color:#cf222e}.grade-dot{font-size:10px}.chart{width:100%}.legend{display:flex;gap:18px;color:var(--muted);margin-top:12px;flex-wrap:wrap}.legend.wrap span{display:inline-flex;align-items:center;gap:6px}.swatch{width:12px;height:12px;border-radius:3px;display:inline-block}.empty{text-align:center;color:var(--muted);padding:60px 20px}.muted{color:var(--muted)}.foot{text-align:center;color:var(--muted);margin-top:34px;font-size:12px}.uplot,.u-title,.u-legend{color:var(--text)}.u-legend .u-marker{border-radius:2px}.profile{background:var(--panel);border:1px solid var(--border);border-radius:12px;padding:20px 22px}.profile .summary{font-size:15px;margin:0 0 12px}.chips{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 14px}.chip{border:1px solid var(--border);background:var(--panel-2);color:var(--text);border-radius:999px;padding:4px 12px;font-size:12.5px;cursor:default}.chip.kind{color:var(--accent);border-color:color-mix(in srgb,var(--accent) 40%,var(--border))}.run-select{background:var(--panel-2);color:var(--text);border:1px solid var(--border);border-radius:6px;padding:4px 8px;font:inherit}.outline-panel{background:var(--panel);border:1px solid var(--border);border-radius:12px;padding:14px 18px 22px}.outline-toolbar{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:10px;padding-bottom:12px;border-bottom:1px solid var(--border);margin-bottom:14px}.breadcrumb{display:flex;align-items:center;flex-wrap:wrap;gap:2px;font-size:13px;min-height:26px}.breadcrumb.muted{color:var(--muted);font-size:12.5px}.crumb{background:none;border:none;color:var(--accent);font:inherit;padding:2px 4px;border-radius:5px;cursor:pointer}.crumb:hover{background:var(--panel-2)}.crumb.current{color:var(--text);font-weight:600;cursor:default}.crumb-sep{color:var(--muted);padding:0 2px}.outline-actions{display:flex;align-items:center;gap:8px}.search{background:var(--panel-2);color:var(--text);border:1px solid var(--border);border-radius:8px;padding:6px 10px;font:inherit;font-size:13px;width:240px}.search:focus{outline:none;border-color:var(--accent)}.ghost-btn{background:none;border:1px solid var(--border);color:var(--muted);border-radius:6px;padding:5px 10px;font-size:12.5px;cursor:pointer}.ghost-btn:hover{color:var(--text);border-color:var(--accent)}.zoom-head{margin:2px 0 12px}.zoom-title{margin:0;font-size:22px;letter-spacing:-.3px}.zoom-summary{margin:6px 0 0;color:var(--muted);max-width:72ch}.zoom-head .files{margin-top:8px}.outline{display:flex;flex-direction:column}.node .children{margin-left:13px;padding-left:22px;border-left:1px solid var(--border)}.row{display:flex;align-items:flex-start;gap:2px;padding:3px 6px 3px 0;border-radius:7px;cursor:default}.row:hover{background:color-mix(in srgb,var(--panel-2) 70%,transparent)}.row.selected{background:color-mix(in srgb,var(--accent) 14%,transparent)}.row.match .title{color:var(--accent)}.node-text mark{background:color-mix(in srgb,var(--accent) 32%,transparent);color:inherit;border-radius:3px;padding:0 1px}.disclosure{flex:none;width:18px;height:22px;background:none;border:none;color:var(--muted);font-size:11px;line-height:22px;padding:0;cursor:pointer;transition:transform .12s ease;transform-origin:45% 50%;visibility:hidden}.node:hover>.row>.disclosure,.row.selected>.disclosure{visibility:visible}.disclosure.open{transform:rotate(90deg)}.disclosure.spacer{cursor:default}.dot{flex:none;width:18px;height:22px;background:none;border:none;padding:0;cursor:pointer;display:inline-flex;align-items:center;justify-content:center}.dot span{width:7px;height:7px;border-radius:50%;background:var(--muted);box-shadow:0 0 0 0 transparent;transition:box-shadow .12s ease,background .12s ease}.dot.loaded span{box-shadow:0 0 0 4px color-mix(in srgb,var(--muted) 28%,transparent)}.dot:hover span{background:var(--accent);box-shadow:0 0 0 4px color-mix(in srgb,var(--accent) 30%,transparent)}.node-text{min-width:0;padding:1px 0;line-height:20px}.node-text .title{font-weight:600}.node-text .summary{color:var(--muted);margin-left:8px}.node-text .summary:before{content:"— "}.kind-badge{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:10.5px;color:var(--muted);background:var(--panel-2);border:1px solid var(--border);border-radius:5px;padding:0 5px;margin-left:8px;vertical-align:1px}.count-badge{font-size:11px;color:var(--muted);background:var(--panel-2);border-radius:999px;padding:0 7px;margin-left:8px;vertical-align:1px}.files{display:inline-flex;flex-wrap:wrap;gap:6px;margin-left:8px}code.file{font-size:11.5px;color:color-mix(in srgb,var(--accent) 75%,var(--text))}.notes{background:var(--panel);border:1px solid var(--border);border-radius:12px;padding:16px 20px}.notes h2{margin:0 0 8px;font-size:15px}.notes p{margin:0;color:var(--muted)}@media (max-width: 640px){.outline-toolbar{flex-direction:column;align-items:stretch}.search{width:100%}.node .children{padding-left:14px}}:root{--prio-critical: #f85149;--prio-high: #f0883e;--prio-medium: #d29922;--prio-low: #58a6ff}:root[data-theme=light]{--prio-critical: #cf222e;--prio-high: #bc4c00;--prio-medium: #9a6700;--prio-low: #0969da}.priority-badge{font-size:10.5px;font-weight:700;text-transform:uppercase;letter-spacing:.4px;border-radius:999px;padding:0 8px;margin-left:8px;border:1px solid transparent;vertical-align:1px}.priority-badge.prio-critical{color:var(--prio-critical);border-color:color-mix(in srgb,var(--prio-critical) 45%,var(--border));background:color-mix(in srgb,var(--prio-critical) 12%,var(--panel-2))}.priority-badge.prio-high{color:var(--prio-high);border-color:color-mix(in srgb,var(--prio-high) 45%,var(--border));background:color-mix(in srgb,var(--prio-high) 12%,var(--panel-2))}.priority-badge.prio-medium{color:var(--prio-medium);border-color:color-mix(in srgb,var(--prio-medium) 45%,var(--border));background:color-mix(in srgb,var(--prio-medium) 12%,var(--panel-2))}.priority-badge.prio-low{color:var(--prio-low);border-color:color-mix(in srgb,var(--prio-low) 45%,var(--border));background:color-mix(in srgb,var(--prio-low) 12%,var(--panel-2))}.priority-bar{display:flex;align-items:center;flex-wrap:wrap;gap:8px;padding-bottom:12px;margin-bottom:12px;border-bottom:1px solid var(--border)}.priority-total{font-size:12.5px;margin-right:4px}.priority-chip{font:inherit;font-size:12px;border-radius:999px;padding:3px 12px;border:1px solid var(--border);background:var(--panel-2);color:var(--muted);cursor:pointer}.priority-chip b{font-weight:700}.priority-chip:disabled{opacity:.45;cursor:default}.priority-chip.prio-critical:not(:disabled){color:var(--prio-critical)}.priority-chip.prio-high:not(:disabled){color:var(--prio-high)}.priority-chip.prio-medium:not(:disabled){color:var(--prio-medium)}.priority-chip.prio-low:not(:disabled){color:var(--prio-low)}.priority-chip.on.prio-critical{border-color:var(--prio-critical);background:color-mix(in srgb,var(--prio-critical) 15%,var(--panel-2))}.priority-chip.on.prio-high{border-color:var(--prio-high);background:color-mix(in srgb,var(--prio-high) 15%,var(--panel-2))}.priority-chip.on.prio-medium{border-color:var(--prio-medium);background:color-mix(in srgb,var(--prio-medium) 15%,var(--panel-2))}.priority-chip.on.prio-low{border-color:var(--prio-low);background:color-mix(in srgb,var(--prio-low) 15%,var(--panel-2))}.case-detail{margin:4px 0 8px 44px;padding:10px 14px;border-left:2px solid var(--border);background:color-mix(in srgb,var(--panel-2) 55%,transparent);border-radius:0 8px 8px 0;display:grid;gap:8px}.case-block{font-size:13px}.case-label{display:block;font-size:10.5px;font-weight:700;text-transform:uppercase;letter-spacing:.5px;color:var(--muted);margin-bottom:2px}.case-block ul,.case-block ol{margin:0;padding-left:20px;display:grid;gap:2px}.case-block p{margin:0}.case-block.expected p{color:var(--text);font-weight:500}</style>
28
+ </head>
29
+ <body>
30
+ <div id="app"></div>
31
+ </body>
32
+ </html>