Update WIT definitions, add tests & CI infra - #7

Merged
posborne merged 13 commits into
mainfrom
posborne/update-wit-ci-and-tests
Sep 5, 2025
Merged

Update WIT definitions, add tests & CI infra#7
posborne merged 13 commits into
mainfrom
posborne/update-wit-ci-and-tests

Conversation

@posborne

Copy link
Copy Markdown
Member

No description provided.

@posborne
posborneforce-pushed the posborne/update-wit-ci-and-tests branch 2 times, most recently from 30919ef to a279d39CompareSeptember 2, 2025 22:41

@erikroseerikrose left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hooray! Looking great! Just a few notes.

Comment thread.github/workflows/python-ci.yml Outdated
Comment thread.github/workflows/python-ci.yml
Comment threadapp.py Outdated
Comment threadapp.py
Comment threadpyproject.toml Outdated
Comment threadtests/test_integration.py Outdated
@posborne
posborneforce-pushed the posborne/update-wit-ci-and-tests branch from 29f294e to c239fccCompareSeptember 3, 2025 17:28
Find an available port and use that for a given test run to avoid
interference with other running viceroy instances or services
on the local machine.
We key off extra output included when running the server
in verbose mode to know when viceroy is ready.
A lot of the extra stuff we had for logging exceptions and
such aren't required any longer as the WASI bits are working
as they ought to, so we can gut all of that.
Also, fixed vcpu_time which does return an integer number
of milliseconds in the viceroy impl, so assert on that.
@posborne
posborneforce-pushed the posborne/update-wit-ci-and-tests branch from 8165059 to ef3406bCompareSeptember 3, 2025 18:13

@erikroseerikrose left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So nice to get rid of that 10s sleep. :-D

Comment threadtests/test_integration.py Outdated
Comment threadtests/test_integration.py Outdated
Comment threadtests/test_integration.py Outdated
Comment threadtests/test_integration.py Outdated
We are using these helpers internally and it probably makes sense
to have some sort of easier setup for end users. This is the first
stab at making that available. Along with those changes, I also
incorporated a few chanes to reduce the code for viceroy setup
using asyncio (still a bit verbose but is working) and a few
other small tweaks.
The plugin to get Viceroy output on failure is a hack and we may
scrap or have to revisit other approaches (e.g. just immediately
outputting to host stdout/stderr) but it is functional and may
be a reasonable approach (if ugly in implementation).
Comment threadfastly_compute/testing.py Outdated
@posborne
posborneforce-pushed the posborne/update-wit-ci-and-tests branch from 5c8041a to 2bc81e9CompareSeptember 4, 2025 19:04
We hide the viceroy_server by making it be an autouse
fixture on the class which lets us clean things up a fair bit.
It stands to reason that all viceroy based tests will want
a server.

@erikroseerikrose left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looking good. I just want to conclude the threads on mark.integration and the lock that I was curious about.

Comment threadfastly_compute/testing.py
Returns:
requests.Response: The HTTP response
"""
timeout = kwargs.pop("timeout", self.REQUEST_TIMEOUT)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It'd be nice to lift timeout up into the function signature. Not a blocker. More a note to my future self.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Deferring this for now.

Comment threadtests/README.md Outdated
Comment threadtests/test_integration.py Outdated
Comment threadtests/README.md Outdated

```bash
make test # Build and run tests
pytest -m integration # Run integration tests only

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One more spot

@erikroseerikrose left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks again, Paul!

@posborne
posborne merged commit 7f5856a into mainSep 5, 2025
3 checks passed
@posborne
posborne deleted the posborne/update-wit-ci-and-tests branch September 5, 2025 19:45
@erikroseerikrose mentioned this pull request Sep 12, 2025
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@posborne@erikrose
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Update WIT definitions, add tests & CI infra - #7

Merged
posborne merged 13 commits into
mainfrom
posborne/update-wit-ci-and-tests
Sep 5, 2025
Merged

Update WIT definitions, add tests & CI infra#7
posborne merged 13 commits into
mainfrom
posborne/update-wit-ci-and-tests

Conversation

@posborne

Copy link
Copy Markdown
Member

No description provided.

@posborne
posborneforce-pushed the posborne/update-wit-ci-and-tests branch 2 times, most recently from 30919ef to a279d39CompareSeptember 2, 2025 22:41

@erikroseerikrose left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hooray! Looking great! Just a few notes.

Comment thread.github/workflows/python-ci.yml Outdated
Comment thread.github/workflows/python-ci.yml
Comment threadapp.py Outdated
Comment threadapp.py
Comment threadpyproject.toml Outdated
Comment threadtests/test_integration.py Outdated
@posborne
posborneforce-pushed the posborne/update-wit-ci-and-tests branch from 29f294e to c239fccCompareSeptember 3, 2025 17:28
Find an available port and use that for a given test run to avoid
interference with other running viceroy instances or services
on the local machine.
We key off extra output included when running the server
in verbose mode to know when viceroy is ready.
A lot of the extra stuff we had for logging exceptions and
such aren't required any longer as the WASI bits are working
as they ought to, so we can gut all of that.
Also, fixed vcpu_time which does return an integer number
of milliseconds in the viceroy impl, so assert on that.
@posborne
posborneforce-pushed the posborne/update-wit-ci-and-tests branch from 8165059 to ef3406bCompareSeptember 3, 2025 18:13

@erikroseerikrose left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So nice to get rid of that 10s sleep. :-D

Comment threadtests/test_integration.py Outdated
Comment threadtests/test_integration.py Outdated
Comment threadtests/test_integration.py Outdated
Comment threadtests/test_integration.py Outdated
We are using these helpers internally and it probably makes sense
to have some sort of easier setup for end users. This is the first
stab at making that available. Along with those changes, I also
incorporated a few chanes to reduce the code for viceroy setup
using asyncio (still a bit verbose but is working) and a few
other small tweaks.
The plugin to get Viceroy output on failure is a hack and we may
scrap or have to revisit other approaches (e.g. just immediately
outputting to host stdout/stderr) but it is functional and may
be a reasonable approach (if ugly in implementation).
Comment threadfastly_compute/testing.py Outdated
@posborne
posborneforce-pushed the posborne/update-wit-ci-and-tests branch from 5c8041a to 2bc81e9CompareSeptember 4, 2025 19:04
We hide the viceroy_server by making it be an autouse
fixture on the class which lets us clean things up a fair bit.
It stands to reason that all viceroy based tests will want
a server.

@erikroseerikrose left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looking good. I just want to conclude the threads on mark.integration and the lock that I was curious about.

Comment threadfastly_compute/testing.py
Returns:
requests.Response: The HTTP response
"""
timeout = kwargs.pop("timeout", self.REQUEST_TIMEOUT)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It'd be nice to lift timeout up into the function signature. Not a blocker. More a note to my future self.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Deferring this for now.

Comment threadtests/README.md Outdated
Comment threadtests/test_integration.py Outdated
Comment threadtests/README.md Outdated

```bash
make test # Build and run tests
pytest -m integration # Run integration tests only

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One more spot

@erikroseerikrose left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks again, Paul!

@posborne
posborne merged commit 7f5856a into mainSep 5, 2025
3 checks passed
@posborne
posborne deleted the posborne/update-wit-ci-and-tests branch September 5, 2025 19:45
@erikroseerikrose mentioned this pull request Sep 12, 2025
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@posborne@erikrose
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Update WIT definitions, add tests & CI infra - #7

Merged
posborne merged 13 commits into
mainfrom
posborne/update-wit-ci-and-tests
Sep 5, 2025
Merged

Update WIT definitions, add tests & CI infra#7
posborne merged 13 commits into
mainfrom
posborne/update-wit-ci-and-tests

Conversation

@posborne

Copy link
Copy Markdown
Member

No description provided.

@posborne
posborneforce-pushed the posborne/update-wit-ci-and-tests branch 2 times, most recently from 30919ef to a279d39CompareSeptember 2, 2025 22:41

@erikroseerikrose left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hooray! Looking great! Just a few notes.

Comment thread.github/workflows/python-ci.yml Outdated
Comment thread.github/workflows/python-ci.yml
Comment threadapp.py Outdated
Comment threadapp.py
Comment threadpyproject.toml Outdated
Comment threadtests/test_integration.py Outdated
@posborne
posborneforce-pushed the posborne/update-wit-ci-and-tests branch from 29f294e to c239fccCompareSeptember 3, 2025 17:28
Find an available port and use that for a given test run to avoid
interference with other running viceroy instances or services
on the local machine.
We key off extra output included when running the server
in verbose mode to know when viceroy is ready.
A lot of the extra stuff we had for logging exceptions and
such aren't required any longer as the WASI bits are working
as they ought to, so we can gut all of that.
Also, fixed vcpu_time which does return an integer number
of milliseconds in the viceroy impl, so assert on that.
@posborne
posborneforce-pushed the posborne/update-wit-ci-and-tests branch from 8165059 to ef3406bCompareSeptember 3, 2025 18:13

@erikroseerikrose left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So nice to get rid of that 10s sleep. :-D

Comment threadtests/test_integration.py Outdated
Comment threadtests/test_integration.py Outdated
Comment threadtests/test_integration.py Outdated
Comment threadtests/test_integration.py Outdated
We are using these helpers internally and it probably makes sense
to have some sort of easier setup for end users. This is the first
stab at making that available. Along with those changes, I also
incorporated a few chanes to reduce the code for viceroy setup
using asyncio (still a bit verbose but is working) and a few
other small tweaks.
The plugin to get Viceroy output on failure is a hack and we may
scrap or have to revisit other approaches (e.g. just immediately
outputting to host stdout/stderr) but it is functional and may
be a reasonable approach (if ugly in implementation).
Comment threadfastly_compute/testing.py Outdated
@posborne
posborneforce-pushed the posborne/update-wit-ci-and-tests branch from 5c8041a to 2bc81e9CompareSeptember 4, 2025 19:04
We hide the viceroy_server by making it be an autouse
fixture on the class which lets us clean things up a fair bit.
It stands to reason that all viceroy based tests will want
a server.

@erikroseerikrose left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looking good. I just want to conclude the threads on mark.integration and the lock that I was curious about.

Comment threadfastly_compute/testing.py
Returns:
requests.Response: The HTTP response
"""
timeout = kwargs.pop("timeout", self.REQUEST_TIMEOUT)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It'd be nice to lift timeout up into the function signature. Not a blocker. More a note to my future self.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Deferring this for now.

Comment threadtests/README.md Outdated
Comment threadtests/test_integration.py Outdated
Comment threadtests/README.md Outdated

```bash
make test # Build and run tests
pytest -m integration # Run integration tests only

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One more spot

@erikroseerikrose left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks again, Paul!

@posborne
posborne merged commit 7f5856a into mainSep 5, 2025
3 checks passed
@posborne
posborne deleted the posborne/update-wit-ci-and-tests branch September 5, 2025 19:45
@erikroseerikrose mentioned this pull request Sep 12, 2025
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@posborne@erikrose
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Update WIT definitions, add tests & CI infra - #7

Merged
posborne merged 13 commits into
mainfrom
posborne/update-wit-ci-and-tests
Sep 5, 2025
Merged

Update WIT definitions, add tests & CI infra#7
posborne merged 13 commits into
mainfrom
posborne/update-wit-ci-and-tests

Conversation

@posborne

Copy link
Copy Markdown
Member

No description provided.

@posborne
posborneforce-pushed the posborne/update-wit-ci-and-tests branch 2 times, most recently from 30919ef to a279d39CompareSeptember 2, 2025 22:41

@erikroseerikrose left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hooray! Looking great! Just a few notes.

Comment thread.github/workflows/python-ci.yml Outdated
Comment thread.github/workflows/python-ci.yml
Comment threadapp.py Outdated
Comment threadapp.py
Comment threadpyproject.toml Outdated
Comment threadtests/test_integration.py Outdated
@posborne
posborneforce-pushed the posborne/update-wit-ci-and-tests branch from 29f294e to c239fccCompareSeptember 3, 2025 17:28
Find an available port and use that for a given test run to avoid
interference with other running viceroy instances or services
on the local machine.
We key off extra output included when running the server
in verbose mode to know when viceroy is ready.
A lot of the extra stuff we had for logging exceptions and
such aren't required any longer as the WASI bits are working
as they ought to, so we can gut all of that.
Also, fixed vcpu_time which does return an integer number
of milliseconds in the viceroy impl, so assert on that.
@posborne
posborneforce-pushed the posborne/update-wit-ci-and-tests branch from 8165059 to ef3406bCompareSeptember 3, 2025 18:13

@erikroseerikrose left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So nice to get rid of that 10s sleep. :-D

Comment threadtests/test_integration.py Outdated
Comment threadtests/test_integration.py Outdated
Comment threadtests/test_integration.py Outdated
Comment threadtests/test_integration.py Outdated
We are using these helpers internally and it probably makes sense
to have some sort of easier setup for end users. This is the first
stab at making that available. Along with those changes, I also
incorporated a few chanes to reduce the code for viceroy setup
using asyncio (still a bit verbose but is working) and a few
other small tweaks.
The plugin to get Viceroy output on failure is a hack and we may
scrap or have to revisit other approaches (e.g. just immediately
outputting to host stdout/stderr) but it is functional and may
be a reasonable approach (if ugly in implementation).
Comment threadfastly_compute/testing.py Outdated
@posborne
posborneforce-pushed the posborne/update-wit-ci-and-tests branch from 5c8041a to 2bc81e9CompareSeptember 4, 2025 19:04
We hide the viceroy_server by making it be an autouse
fixture on the class which lets us clean things up a fair bit.
It stands to reason that all viceroy based tests will want
a server.

@erikroseerikrose left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looking good. I just want to conclude the threads on mark.integration and the lock that I was curious about.

Comment threadfastly_compute/testing.py
Returns:
requests.Response: The HTTP response
"""
timeout = kwargs.pop("timeout", self.REQUEST_TIMEOUT)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It'd be nice to lift timeout up into the function signature. Not a blocker. More a note to my future self.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Deferring this for now.

Comment threadtests/README.md Outdated
Comment threadtests/test_integration.py Outdated
Comment threadtests/README.md Outdated

```bash
make test # Build and run tests
pytest -m integration # Run integration tests only

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One more spot

@erikroseerikrose left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks again, Paul!

@posborne
posborne merged commit 7f5856a into mainSep 5, 2025
3 checks passed
@posborne
posborne deleted the posborne/update-wit-ci-and-tests branch September 5, 2025 19:45
@erikroseerikrose mentioned this pull request Sep 12, 2025
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@posborne@erikrose
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Update WIT definitions, add tests & CI infra - #7

Merged
posborne merged 13 commits into
mainfrom
posborne/update-wit-ci-and-tests
Sep 5, 2025
Merged

Update WIT definitions, add tests & CI infra#7
posborne merged 13 commits into
mainfrom
posborne/update-wit-ci-and-tests

Conversation

@posborne

Copy link
Copy Markdown
Member

No description provided.

@posborne
posborneforce-pushed the posborne/update-wit-ci-and-tests branch 2 times, most recently from 30919ef to a279d39CompareSeptember 2, 2025 22:41

@erikroseerikrose left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hooray! Looking great! Just a few notes.

Comment thread.github/workflows/python-ci.yml Outdated
Comment thread.github/workflows/python-ci.yml
Comment threadapp.py Outdated
Comment threadapp.py
Comment threadpyproject.toml Outdated
Comment threadtests/test_integration.py Outdated
@posborne
posborneforce-pushed the posborne/update-wit-ci-and-tests branch from 29f294e to c239fccCompareSeptember 3, 2025 17:28
Find an available port and use that for a given test run to avoid
interference with other running viceroy instances or services
on the local machine.
We key off extra output included when running the server
in verbose mode to know when viceroy is ready.
A lot of the extra stuff we had for logging exceptions and
such aren't required any longer as the WASI bits are working
as they ought to, so we can gut all of that.
Also, fixed vcpu_time which does return an integer number
of milliseconds in the viceroy impl, so assert on that.
@posborne
posborneforce-pushed the posborne/update-wit-ci-and-tests branch from 8165059 to ef3406bCompareSeptember 3, 2025 18:13

@erikroseerikrose left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So nice to get rid of that 10s sleep. :-D

Comment threadtests/test_integration.py Outdated
Comment threadtests/test_integration.py Outdated
Comment threadtests/test_integration.py Outdated
Comment threadtests/test_integration.py Outdated
We are using these helpers internally and it probably makes sense
to have some sort of easier setup for end users. This is the first
stab at making that available. Along with those changes, I also
incorporated a few chanes to reduce the code for viceroy setup
using asyncio (still a bit verbose but is working) and a few
other small tweaks.
The plugin to get Viceroy output on failure is a hack and we may
scrap or have to revisit other approaches (e.g. just immediately
outputting to host stdout/stderr) but it is functional and may
be a reasonable approach (if ugly in implementation).
Comment threadfastly_compute/testing.py Outdated
@posborne
posborneforce-pushed the posborne/update-wit-ci-and-tests branch from 5c8041a to 2bc81e9CompareSeptember 4, 2025 19:04
We hide the viceroy_server by making it be an autouse
fixture on the class which lets us clean things up a fair bit.
It stands to reason that all viceroy based tests will want
a server.

@erikroseerikrose left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looking good. I just want to conclude the threads on mark.integration and the lock that I was curious about.

Comment threadfastly_compute/testing.py
Returns:
requests.Response: The HTTP response
"""
timeout = kwargs.pop("timeout", self.REQUEST_TIMEOUT)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It'd be nice to lift timeout up into the function signature. Not a blocker. More a note to my future self.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Deferring this for now.

Comment threadtests/README.md Outdated
Comment threadtests/test_integration.py Outdated
Comment threadtests/README.md Outdated

```bash
make test # Build and run tests
pytest -m integration # Run integration tests only

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One more spot

@erikroseerikrose left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks again, Paul!

@posborne
posborne merged commit 7f5856a into mainSep 5, 2025
3 checks passed
@posborne
posborne deleted the posborne/update-wit-ci-and-tests branch September 5, 2025 19:45
@erikroseerikrose mentioned this pull request Sep 12, 2025
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@posborne@erikrose
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Update WIT definitions, add tests & CI infra - #7

Merged
posborne merged 13 commits into
mainfrom
posborne/update-wit-ci-and-tests
Sep 5, 2025
Merged

Update WIT definitions, add tests & CI infra#7
posborne merged 13 commits into
mainfrom
posborne/update-wit-ci-and-tests

Conversation

@posborne

Copy link
Copy Markdown
Member

No description provided.

@posborne
posborneforce-pushed the posborne/update-wit-ci-and-tests branch 2 times, most recently from 30919ef to a279d39CompareSeptember 2, 2025 22:41

@erikroseerikrose left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hooray! Looking great! Just a few notes.

Comment thread.github/workflows/python-ci.yml Outdated
Comment thread.github/workflows/python-ci.yml
Comment threadapp.py Outdated
Comment threadapp.py
Comment threadpyproject.toml Outdated
Comment threadtests/test_integration.py Outdated
@posborne
posborneforce-pushed the posborne/update-wit-ci-and-tests branch from 29f294e to c239fccCompareSeptember 3, 2025 17:28
Find an available port and use that for a given test run to avoid
interference with other running viceroy instances or services
on the local machine.
We key off extra output included when running the server
in verbose mode to know when viceroy is ready.
A lot of the extra stuff we had for logging exceptions and
such aren't required any longer as the WASI bits are working
as they ought to, so we can gut all of that.
Also, fixed vcpu_time which does return an integer number
of milliseconds in the viceroy impl, so assert on that.
@posborne
posborneforce-pushed the posborne/update-wit-ci-and-tests branch from 8165059 to ef3406bCompareSeptember 3, 2025 18:13

@erikroseerikrose left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So nice to get rid of that 10s sleep. :-D

Comment threadtests/test_integration.py Outdated
Comment threadtests/test_integration.py Outdated
Comment threadtests/test_integration.py Outdated
Comment threadtests/test_integration.py Outdated
We are using these helpers internally and it probably makes sense
to have some sort of easier setup for end users. This is the first
stab at making that available. Along with those changes, I also
incorporated a few chanes to reduce the code for viceroy setup
using asyncio (still a bit verbose but is working) and a few
other small tweaks.
The plugin to get Viceroy output on failure is a hack and we may
scrap or have to revisit other approaches (e.g. just immediately
outputting to host stdout/stderr) but it is functional and may
be a reasonable approach (if ugly in implementation).
Comment threadfastly_compute/testing.py Outdated
@posborne
posborneforce-pushed the posborne/update-wit-ci-and-tests branch from 5c8041a to 2bc81e9CompareSeptember 4, 2025 19:04
We hide the viceroy_server by making it be an autouse
fixture on the class which lets us clean things up a fair bit.
It stands to reason that all viceroy based tests will want
a server.

@erikroseerikrose left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looking good. I just want to conclude the threads on mark.integration and the lock that I was curious about.

Comment threadfastly_compute/testing.py
Returns:
requests.Response: The HTTP response
"""
timeout = kwargs.pop("timeout", self.REQUEST_TIMEOUT)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It'd be nice to lift timeout up into the function signature. Not a blocker. More a note to my future self.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Deferring this for now.

Comment threadtests/README.md Outdated
Comment threadtests/test_integration.py Outdated
Comment threadtests/README.md Outdated

```bash
make test # Build and run tests
pytest -m integration # Run integration tests only

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One more spot

@erikroseerikrose left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks again, Paul!

@posborne
posborne merged commit 7f5856a into mainSep 5, 2025
3 checks passed
@posborne
posborne deleted the posborne/update-wit-ci-and-tests branch September 5, 2025 19:45
@erikroseerikrose mentioned this pull request Sep 12, 2025
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@posborne@erikrose
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Update WIT definitions, add tests & CI infra - #7

Merged
posborne merged 13 commits into
mainfrom
posborne/update-wit-ci-and-tests
Sep 5, 2025
Merged

Update WIT definitions, add tests & CI infra#7
posborne merged 13 commits into
mainfrom
posborne/update-wit-ci-and-tests

Conversation

@posborne

Copy link
Copy Markdown
Member

No description provided.

@posborne
posborneforce-pushed the posborne/update-wit-ci-and-tests branch 2 times, most recently from 30919ef to a279d39CompareSeptember 2, 2025 22:41

@erikroseerikrose left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hooray! Looking great! Just a few notes.

Comment thread.github/workflows/python-ci.yml Outdated
Comment thread.github/workflows/python-ci.yml
Comment threadapp.py Outdated
Comment threadapp.py
Comment threadpyproject.toml Outdated
Comment threadtests/test_integration.py Outdated
@posborne
posborneforce-pushed the posborne/update-wit-ci-and-tests branch from 29f294e to c239fccCompareSeptember 3, 2025 17:28
Find an available port and use that for a given test run to avoid
interference with other running viceroy instances or services
on the local machine.
We key off extra output included when running the server
in verbose mode to know when viceroy is ready.
A lot of the extra stuff we had for logging exceptions and
such aren't required any longer as the WASI bits are working
as they ought to, so we can gut all of that.
Also, fixed vcpu_time which does return an integer number
of milliseconds in the viceroy impl, so assert on that.
@posborne
posborneforce-pushed the posborne/update-wit-ci-and-tests branch from 8165059 to ef3406bCompareSeptember 3, 2025 18:13

@erikroseerikrose left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So nice to get rid of that 10s sleep. :-D

Comment threadtests/test_integration.py Outdated
Comment threadtests/test_integration.py Outdated
Comment threadtests/test_integration.py Outdated
Comment threadtests/test_integration.py Outdated
We are using these helpers internally and it probably makes sense
to have some sort of easier setup for end users. This is the first
stab at making that available. Along with those changes, I also
incorporated a few chanes to reduce the code for viceroy setup
using asyncio (still a bit verbose but is working) and a few
other small tweaks.
The plugin to get Viceroy output on failure is a hack and we may
scrap or have to revisit other approaches (e.g. just immediately
outputting to host stdout/stderr) but it is functional and may
be a reasonable approach (if ugly in implementation).
Comment threadfastly_compute/testing.py Outdated
@posborne
posborneforce-pushed the posborne/update-wit-ci-and-tests branch from 5c8041a to 2bc81e9CompareSeptember 4, 2025 19:04
We hide the viceroy_server by making it be an autouse
fixture on the class which lets us clean things up a fair bit.
It stands to reason that all viceroy based tests will want
a server.

@erikroseerikrose left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looking good. I just want to conclude the threads on mark.integration and the lock that I was curious about.

Comment threadfastly_compute/testing.py
Returns:
requests.Response: The HTTP response
"""
timeout = kwargs.pop("timeout", self.REQUEST_TIMEOUT)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It'd be nice to lift timeout up into the function signature. Not a blocker. More a note to my future self.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Deferring this for now.

Comment threadtests/README.md Outdated
Comment threadtests/test_integration.py Outdated
Comment threadtests/README.md Outdated

```bash
make test # Build and run tests
pytest -m integration # Run integration tests only

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One more spot

@erikroseerikrose left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks again, Paul!

@posborne
posborne merged commit 7f5856a into mainSep 5, 2025
3 checks passed
@posborne
posborne deleted the posborne/update-wit-ci-and-tests branch September 5, 2025 19:45
@erikroseerikrose mentioned this pull request Sep 12, 2025
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@posborne@erikrose
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Update WIT definitions, add tests & CI infra - #7

Merged
posborne merged 13 commits into
mainfrom
posborne/update-wit-ci-and-tests
Sep 5, 2025
Merged

Update WIT definitions, add tests & CI infra#7
posborne merged 13 commits into
mainfrom
posborne/update-wit-ci-and-tests

Conversation

@posborne

Copy link
Copy Markdown
Member

No description provided.

@posborne
posborneforce-pushed the posborne/update-wit-ci-and-tests branch 2 times, most recently from 30919ef to a279d39CompareSeptember 2, 2025 22:41

@erikroseerikrose left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hooray! Looking great! Just a few notes.

Comment thread.github/workflows/python-ci.yml Outdated
Comment thread.github/workflows/python-ci.yml
Comment threadapp.py Outdated
Comment threadapp.py
Comment threadpyproject.toml Outdated
Comment threadtests/test_integration.py Outdated
@posborne
posborneforce-pushed the posborne/update-wit-ci-and-tests branch from 29f294e to c239fccCompareSeptember 3, 2025 17:28
Find an available port and use that for a given test run to avoid
interference with other running viceroy instances or services
on the local machine.
We key off extra output included when running the server
in verbose mode to know when viceroy is ready.
A lot of the extra stuff we had for logging exceptions and
such aren't required any longer as the WASI bits are working
as they ought to, so we can gut all of that.
Also, fixed vcpu_time which does return an integer number
of milliseconds in the viceroy impl, so assert on that.
@posborne
posborneforce-pushed the posborne/update-wit-ci-and-tests branch from 8165059 to ef3406bCompareSeptember 3, 2025 18:13

@erikroseerikrose left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So nice to get rid of that 10s sleep. :-D

Comment threadtests/test_integration.py Outdated
Comment threadtests/test_integration.py Outdated
Comment threadtests/test_integration.py Outdated
Comment threadtests/test_integration.py Outdated
We are using these helpers internally and it probably makes sense
to have some sort of easier setup for end users. This is the first
stab at making that available. Along with those changes, I also
incorporated a few chanes to reduce the code for viceroy setup
using asyncio (still a bit verbose but is working) and a few
other small tweaks.
The plugin to get Viceroy output on failure is a hack and we may
scrap or have to revisit other approaches (e.g. just immediately
outputting to host stdout/stderr) but it is functional and may
be a reasonable approach (if ugly in implementation).
Comment threadfastly_compute/testing.py Outdated
@posborne
posborneforce-pushed the posborne/update-wit-ci-and-tests branch from 5c8041a to 2bc81e9CompareSeptember 4, 2025 19:04
We hide the viceroy_server by making it be an autouse
fixture on the class which lets us clean things up a fair bit.
It stands to reason that all viceroy based tests will want
a server.

@erikroseerikrose left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looking good. I just want to conclude the threads on mark.integration and the lock that I was curious about.

Comment threadfastly_compute/testing.py
Returns:
requests.Response: The HTTP response
"""
timeout = kwargs.pop("timeout", self.REQUEST_TIMEOUT)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It'd be nice to lift timeout up into the function signature. Not a blocker. More a note to my future self.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Deferring this for now.

Comment threadtests/README.md Outdated
Comment threadtests/test_integration.py Outdated
Comment threadtests/README.md Outdated

```bash
make test # Build and run tests
pytest -m integration # Run integration tests only

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One more spot

@erikroseerikrose left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks again, Paul!

@posborne
posborne merged commit 7f5856a into mainSep 5, 2025
3 checks passed
@posborne
posborne deleted the posborne/update-wit-ci-and-tests branch September 5, 2025 19:45
@erikroseerikrose mentioned this pull request Sep 12, 2025
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@posborne@erikrose