<feed xmlns='http://www.w3.org/2005/Atom'>
<title>newos4, branch main</title>
<subtitle>newOS4 - the browser terminal that runs WebX11 user spaces</subtitle>
<id>https://newos.webx11.duckdns.org/newos4/atom?h=main</id>
<link rel='self' href='https://newos.webx11.duckdns.org/newos4/atom?h=main'/>
<link rel='alternate' type='text/html' href='https://newos.webx11.duckdns.org/newos4/'/>
<updated>2026-11-05T21:32:04+00:00</updated>
<entry>
<title>feat(git): namespace contrib refs per account (contrib/&lt;user&gt;/&lt;topic&gt;)</title>
<updated>2026-11-05T21:32:04+00:00</updated>
<author>
<name>WebX11 SysOp</name>
<email>darkmotox11@gmail.com</email>
</author>
<published>2026-11-05T21:32:04+00:00</published>
<link rel='alternate' type='text/html' href='https://newos.webx11.duckdns.org/newos4/commit/?id=3bb89a967645902bb695aedbaea0103def2b3b16'/>
<id>urn:sha1:3bb89a967645902bb695aedbaea0103def2b3b16</id>
<content type='text'>
Done before anyone has a token or a branch, because renaming later breaks every
contributor. The hook compares the middle path segment to REMOTE_USER, so a token
can only write under its own namespace; deletion and cleanup become a prefix
operation instead of a guess.

Verified 4/4: own namespace accepted, neighbour's namespace refused naming the
authenticated user, missing owner segment refused with the correct form, main
refused. Test branch and token removed afterwards; queue back to 0.
</content>
</entry>
<entry>
<title>feat(git): contrib push surface with automated moderation</title>
<updated>2026-11-05T21:26:25+00:00</updated>
<author>
<name>WebX11 SysOp</name>
<email>darkmotox11@gmail.com</email>
</author>
<published>2026-11-05T21:26:25+00:00</published>
<link rel='alternate' type='text/html' href='https://newos.webx11.duckdns.org/newos4/commit/?id=2efbcea4785402134c4db09d3febda0e82aab71e'/>
<id>urn:sha1:2efbcea4785402134c4db09d3febda0e82aab71e</id>
<content type='text'>
Users push to push.newos.webx11.duckdns.org with a per-user token; the read-only
host is untouched. http.receivepack is unset so git only allows receive-pack when
REMOTE_USER is present, which only that vhost sets. A pre-receive hook (installed
by the publisher every run) allows refs/heads/contrib/* only and refuses banned
paths, credential-shaped blobs, &gt;200 files or &gt;2MB, logging user+ref+decision.

moderate-contrib.py triages every 10 min: deletes hard violations, stamps the
rest ready-docs/review/stale into a queue rendered at /admin/git-contrib.html.
A human still decides what merges.

Verified end to end: contrib push accepted, main refused, credential file
refused, accepted ref visible on the read-only host; guard extended (push host
401, hook present+executable, receivepack unset) and proven RED by removing the
hook.
</content>
</entry>
<entry>
<title>docs(newos4): reconcile pi version (verified on 0.80.3, npm ships 1.5.0)</title>
<updated>2026-11-05T21:16:10+00:00</updated>
<author>
<name>WebX11 SysOp</name>
<email>darkmotox11@gmail.com</email>
</author>
<published>2026-11-05T21:16:10+00:00</published>
<link rel='alternate' type='text/html' href='https://newos.webx11.duckdns.org/newos4/commit/?id=4f279d975c8aa55f44934a2ab6af67ebd3f7d454'/>
<id>urn:sha1:4f279d975c8aa55f44934a2ab6af67ebd3f7d454</id>
<content type='text'>
</content>
</entry>
<entry>
<title>docs(newos4): install pi + point it at Ollama; fix dead /about/ link</title>
<updated>2026-11-05T21:14:52+00:00</updated>
<author>
<name>WebX11 SysOp</name>
<email>darkmotox11@gmail.com</email>
</author>
<published>2026-11-05T21:14:52+00:00</published>
<link rel='alternate' type='text/html' href='https://newos.webx11.duckdns.org/newos4/commit/?id=aa94c87ee811c5e12d956b80c528ce362ce58eea'/>
<id>urn:sha1:aa94c87ee811c5e12d956b80c528ce362ce58eea</id>
<content type='text'>
Install is npm (node&gt;=22.19). Ollama wiring is two files under ~/.pi/agent:
models.json (baseUrl http://localhost:11434/v1, api openai-completions, model
list) and settings.json (defaultProvider/defaultModel). Documents the trap that
a pulled model must also be declared — undeclared gives 'Model not found', which
reads like a connection failure. Both paths verified on this host: declared
coder:latest -&gt; 'LOCAL OK', undeclared llama3.2:latest -&gt; error.

The two /about/ links pointed at the host root, where nothing exists; the repo
page is /newos4/about/.
</content>
</entry>
<entry>
<title>docs(newos4): automating with the pi agent (recipes verified against pi 0.80.3)</title>
<updated>2026-11-05T21:00:12+00:00</updated>
<author>
<name>WebX11 SysOp</name>
<email>darkmotox11@gmail.com</email>
</author>
<published>2026-11-05T21:00:12+00:00</published>
<link rel='alternate' type='text/html' href='https://newos.webx11.duckdns.org/newos4/commit/?id=4fdff92d6e2ba89d40283d01e93c4889f45788be'/>
<id>urn:sha1:4fdff92d6e2ba89d40283d01e93c4889f45788be</id>
<content type='text'>
Four recipes on the usage page: one-shot @file analysis, --mode json + jq for
scripts, a read-only --tools allowlist for tree inspection, and a cron-able
digest. Every flag shown was exercised on this host first; the retired-default
model gotcha (HTTP 410 'was retired') is documented because it wasted a run.
Adds the untrusted-input warning: pi auto-loads AGENTS.md/skills from the working
directory, so a public clone must run with --no-approve and no write tools.
</content>
</entry>
<entry>
<title>docs(newos4): last stale count on the usage page (181 commits)</title>
<updated>2026-11-05T19:55:25+00:00</updated>
<author>
<name>WebX11 SysOp</name>
<email>darkmotox11@gmail.com</email>
</author>
<published>2026-11-05T19:55:25+00:00</published>
<link rel='alternate' type='text/html' href='https://newos.webx11.duckdns.org/newos4/commit/?id=3cc43867059b3ff7b581ffe2205f7d5dc410a3f6'/>
<id>urn:sha1:3cc43867059b3ff7b581ffe2205f7d5dc410a3f6</id>
<content type='text'>
</content>
</entry>
<entry>
<title>docs(newos4): usage page fits a 390 px screen</title>
<updated>2026-11-05T19:54:29+00:00</updated>
<author>
<name>WebX11 SysOp</name>
<email>darkmotox11@gmail.com</email>
</author>
<published>2026-11-05T19:54:29+00:00</published>
<link rel='alternate' type='text/html' href='https://newos.webx11.duckdns.org/newos4/commit/?id=3c0fe68f9e41c249c91c7688571b2347f7f9281a'/>
<id>urn:sha1:3c0fe68f9e41c249c91c7688571b2347f7f9281a</id>
<content type='text'>
Two measured overflows, both structural: a grid item defaults to min-width:auto
so one long command stretched the column to 521 px, and the troubleshooting table
had no fixed layout so a column of long code strings pushed the page 75 px wide.
minmax(0,1fr) + min-width:0 + table-layout:fixed + overflow-wrap:anywhere.
verify-mobile: 4/4 viewports OK.
</content>
</entry>
<entry>
<title>docs(newos4): no byte count either — it grows with every publish</title>
<updated>2026-11-05T19:53:08+00:00</updated>
<author>
<name>WebX11 SysOp</name>
<email>darkmotox11@gmail.com</email>
</author>
<published>2026-11-05T19:53:08+00:00</published>
<link rel='alternate' type='text/html' href='https://newos.webx11.duckdns.org/newos4/commit/?id=49c6fe2c1bcd12ca06d81a1f340c484d1aca5982'/>
<id>urn:sha1:49c6fe2c1bcd12ca06d81a1f340c484d1aca5982</id>
<content type='text'>
</content>
</entry>
<entry>
<title>docs(newos4): drop hardcoded file/commit counts from the usage page</title>
<updated>2026-11-05T19:53:01+00:00</updated>
<author>
<name>WebX11 SysOp</name>
<email>darkmotox11@gmail.com</email>
</author>
<published>2026-11-05T19:53:01+00:00</published>
<link rel='alternate' type='text/html' href='https://newos.webx11.duckdns.org/newos4/commit/?id=1d5d502ebbe6c7f98e24853516037ef67610fd1f'/>
<id>urn:sha1:1d5d502ebbe6c7f98e24853516037ef67610fd1f</id>
<content type='text'>
310 files / 182 commits were already wrong at publish time (184). A count that
changes on every publish is a rot vector; the page now says what the tree is and
lets the reader run the commands.
</content>
</entry>
<entry>
<title>docs(newos4): per-OS clone guide (Linux, macOS, Windows, Termux, iOS)</title>
<updated>2026-11-05T19:52:26+00:00</updated>
<author>
<name>WebX11 SysOp</name>
<email>darkmotox11@gmail.com</email>
</author>
<published>2026-11-05T19:52:26+00:00</published>
<link rel='alternate' type='text/html' href='https://newos.webx11.duckdns.org/newos4/commit/?id=1758396d8c1bd9b916b9aeef5fc2f34fe4500606'/>
<id>urn:sha1:1758396d8c1bd9b916b9aeef5fc2f34fe4500606</id>
<content type='text'>
Served at https://newos.webx11.duckdns.org/usage.html from docs/usage.html in this
repo, so the page, the mirror and the README share one source. Covers the four
failure modes that actually bite: CRLF on Windows (core.autocrlf), missing CA
bundles, cloning into /sdcard from Termux (FUSE has no POSIX permissions), and
the read-only 403 on push.
</content>
</entry>
</feed>
