<feed xmlns='http://www.w3.org/2005/Atom'>
<title>newos4/guide.html, 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-10-27T16:42:46+00:00</updated>
<entry>
<title>fix(docs): apply the GLM-5.3 review to the changelog pipeline</title>
<updated>2026-10-27T16:42:46+00:00</updated>
<author>
<name>Agando</name>
<email>roduccomm@gmail.com</email>
</author>
<published>2026-10-27T16:42:46+00:00</published>
<link rel='alternate' type='text/html' href='https://newos.webx11.duckdns.org/newos4/commit/?id=1d78155c38fcbc9c76bad7c522e9d9f1060bc4b9'/>
<id>urn:sha1:1d78155c38fcbc9c76bad7c522e9d9f1060bc4b9</id>
<content type='text'>
Verdict was APPROVE WITH CHANGES: 21 findings, 17 fixed, 3 refuted with the command that killed
them, 1 kept with the audit that justifies it. The reviewer's best find was a design bug of mine,
not a typo.

- The age guard was unfixable by --fix and fired on a quiet week. check_changelog() regenerated only
  on a version mismatch, then returned from the version-match branch before the age check could act,
  so a page older than the threshold stayed red forever with the false diagnosis "the daily job is
  not running". Now --fix always regenerates (0.84 s) and age is read from a new `checked` stamp
  separate from `generated` (content-change time), which also stops a daily 65 KB rewrite of an
  unchanged page. Proved: seeded 641 h -&gt; FAIL + "run maintain --fix to refresh" -&gt; --fix -&gt; PASS.
- Atomic writes everywhere (temp + os.replace): nginx serves these files off disk, so an in-place
  truncate could hand a visitor half a page.
- The JSON island now escapes "&lt;/" (a commit subject containing &lt;/script&gt; would have closed it
  early and truncated the page). Proved by injecting exactly that subject: island still parses, no
  stray script tag, payload survives as data.
- Sibling drift is checked, not assumed: changelog.json's currentVersion is compared with
  LATEST_VER. Seeded v4.6.100 -&gt; FAIL "feed drifted", --fix repairs.
- Build tags are audited under --deep: 67 tags, each must be reachable from HEAD and name the
  version its commit tree carries. Proved by tampering (v9.9.9 on the root commit -&gt; FAIL) and by
  deleting it (-&gt; PASS).
- Feed: ids no longer hardcode 2026 or contain spaces, entries carry a &lt;link&gt;, timestamps are real
  iso-strict commit times instead of a fake T00:00:00Z on a local date, and summaries are truncated
  before escaping so no "&amp;l" tail. 0 ids with spaces, 0 broken entity tails.
- write_md refuses to overwrite a CHANGELOG.md that lost its markers; run() gained a 300 s timeout
  (a hung git used to block the whole 07:15 job); jumpToHash no longer stacks hint paragraphs;
  dead fields removed (KIND_ORDER, order, currentSynthesized, sourcesRead — each appeared exactly
  once in the page, i.e. only in the island the generator wrote).
- HTML nits: guide.html footer separator, empty "fixed in" line suppressed, help.html version
  bumped off v4.5.22. Header stat relabelled "Commits behind it" (it read "Bug records on disk"
  while counting commits — my own defect, not the reviewer's).
- Refuted: merge commits (repo has 0: `git log --merges | wc -l`), first-version board links (the 2
  multi-version notes both name the fixing build first), sources disclosure (the page already
  renders those module paths).

maintain --deep: node tests 20/20, changelog current, age 0.0h, 67 tags verified, result OK.
Mobile: ALL VIEWPORTS OK.
</content>
</entry>
<entry>
<title>feat(docs): link the changelog in and deep-link each board fix to its build</title>
<updated>2026-10-27T16:25:37+00:00</updated>
<author>
<name>Agando</name>
<email>roduccomm@gmail.com</email>
</author>
<published>2026-10-27T16:25:37+00:00</published>
<link rel='alternate' type='text/html' href='https://newos.webx11.duckdns.org/newos4/commit/?id=34354da1235916fd83768d94fac960e425056271'/>
<id>urn:sha1:34354da1235916fd83768d94fac960e425056271</id>
<content type='text'>
The generated changelog was an orphan: no page linked to it, and nothing linked from it, so
"generated and maintained" still meant "nobody lands here".

- guide.html + help.html footers and the board header now link the changelog (and the board, from
  the app side). All three verified live: HTTP 200, 1 link each.
- Every closed board card gains "fixed in &lt;sha&gt; · v4.6.XXX" where the version is a link to
  changelog.html#v4-6-XXX. The anchor rule is the changelog renderer's own
  (non-alphanumerics -&gt; "-", lowercased), not a second guess at it.
- The page now actually jumps to a hash. Previously the list is built by JS after load, so the
  browser's own anchor scroll ran against an empty list and every deep link landed at the top.
  jumpToHash() runs after render and on hashchange.
- A build can legitimately be missing: v4.6.83 fixed MAINT-002 but never reached a commit (the
  version was superseded before anything was committed), so #v4-6-83 has no entry. Rather than
  dropping the reader at the top, the page lands on v4.6.84 and says why in a hint line.

Verification, live:
- 22 cards carry a changelog link; board header shows "Release notes: changelog.html".
- #v4-6-107 -&gt; targetExists true, :target highlight true, top 0, scrolled into view, no note.
- #v4-6-83  -&gt; scrollY 5235, note: "#v4-6-83 has no commit of its own — the version was
  superseded before it reached a commit — so this is v4.6.84, the next build that did."
- renderer JS and board JS both pass node --check on the extracted &lt;script&gt; bodies.
</content>
</entry>
<entry>
<title>auto: 2026-06-13_18:00 changes</title>
<updated>2026-06-13T16:00:58+00:00</updated>
<author>
<name>Agando</name>
<email>roduccomm@gmail.com</email>
</author>
<published>2026-06-13T16:00:58+00:00</published>
<link rel='alternate' type='text/html' href='https://newos.webx11.duckdns.org/newos4/commit/?id=de713efd619360e29b9bfc4b99d30d2a86b96caf'/>
<id>urn:sha1:de713efd619360e29b9bfc4b99d30d2a86b96caf</id>
<content type='text'>
</content>
</entry>
</feed>
