<feed xmlns='http://www.w3.org/2005/Atom'>
<title>newos4/modules/core/module-predictor.js, 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-27T10:23:23+00:00</updated>
<entry>
<title>fix(newos4): rollback keeps scaffolding, checkpoints cannot collide, tests gate the build</title>
<updated>2026-10-27T10:23:23+00:00</updated>
<author>
<name>Agando</name>
<email>roduccomm@gmail.com</email>
</author>
<published>2026-10-27T10:23:10+00:00</published>
<link rel='alternate' type='text/html' href='https://newos.webx11.duckdns.org/newos4/commit/?id=d2de622744212ea0ba720b3f4212b82940ffe84b'/>
<id>urn:sha1:d2de622744212ea0ba720b3f4212b82940ffe84b</id>
<content type='text'>
Review of the 08:30 implementer run (v4.6.102, checkpoint name fix). The shipped fix was
correct; these are the defects it introduced or left behind, each measured first.

- virtual-fs.js rollback(): the snapshot strips _snapshots/_sessions/.trash for bloat. Restoring
  it verbatim deleted every checkpoint, every agent session and the trash, made rollback
  irreversible and unrepeatable. Re-attach the live copies after the root swap.
- checkpoint(): names are millisecond-resolution, so tight calls overwrote each other
  (measured 6 calls -&gt; 3 snapshots). Dedupe with a -N suffix, refuse names containing "/"
  (written but unlistable), and prune by snapshot createdAt instead of filename sort, which
  let a custom name ("aaa-oldest") evict newer auto-named checkpoints.
- module-predictor.js: legacy pre-v2 points have no `usable`, so a 0.079 s aborted run
  re-entered similarity as evidence and floored every prediction at 1 s. Backfill `usable`
  from the measurement on load, drop the ones it rejects, add a belt-and-braces guard in
  _findSimilar and count only usable points as actual executions.
- newos4-maintain.py: run every node-runnable modules/test/test-*.js on each maintenance pass.
  The v4.6.102 regression was written but no job ever executed it.
- newos4-steer.py: `done` now requires --commit &lt;sha&gt; that exists in the repo, and gains
  `reopen`. A written plan was being closed as done at 06:17 while the predictor fix shipped
  nowhere, so the implementer's pre-flight queue was empty.
- steering.json: predictor item reopened, checkpoint item stamped with f7249ff.
- maintenance board: MAINT-002/005/015 were fixed in v4.6.81-85 but still listed open/high;
  closed with their commit ids, and MAINT-010/016 annotated with the probes that keep them open.

Tests: test-vfs-checkpoint 23/23 (RED 14/9 before), test-predictor-accuracy 38/38
(T1-T3 RED on HEAD), maintain --fix all PASS, browser round-trip
"Checkpoint created: &lt;name&gt;" -&gt; "Rolled back to checkpoint: &lt;name&gt;" on v4.6.103.

Also carries the already-deployed 2026-10-26 syntax-gate hunk in newos4-maintain.py (syntax_failures + gated rebuild) that had never been committed.
</content>
</entry>
<entry>
<title>feat(newos4): on-demand worker labels and a server-canonical predictor store (v4.6.70)</title>
<updated>2026-10-23T17:01:46+00:00</updated>
<author>
<name>Agando</name>
<email>roduccomm@gmail.com</email>
</author>
<published>2026-10-23T17:01:46+00:00</published>
<link rel='alternate' type='text/html' href='https://newos.webx11.duckdns.org/newos4/commit/?id=b0f90494fa00e787f8e9d34368febf2e7e26e8a6'/>
<id>urn:sha1:b0f90494fa00e787f8e9d34368febf2e7e26e8a6</id>
<content type='text'>
Two decisions recorded by the operator on 2026-10-23, implemented.

6 — spawn-on-demand is the design, so stop reporting it as a defect:
- OrchestratorModule counts delegations inside delegateTask()
- status prints "Mode: on-demand — N/M worker(s) available, X delegation(s) this
  session" and drops the "spawning is not dispatching" warning
- per-agent lines read "available, no delegations yet (spawned ...)" / "N
  delegation(s), last ..."

10 — per-user, server file canonical, browser VFS a TTL'd read-through cache:
- store = the user's own WebDAV space (&lt;space&gt;/_data/predictor.json), so identity
  comes from credentials the app already has; no new endpoint, no unauthenticated
  write surface
- 5 min TTL: cache wins while fresh, server wins when it differs; a banner naming
  both counts prints only on divergence
- write-through on save (debounced 5 s) with a MKCOL retry when the collection does
  not exist yet; store mode is printed by predictor-status
- the cache write is guarded and verified — a missing /system/metrics made writeFile
  fail silently, which is how the first version lost a pull

Verified live on v4.6.70 with a stubbed transport: pull applies 5 pts/5 paired and
writes a stamped cache, the divergence banner fires once and not on the second
(equal) pull, write-through PUT is issued, status reads "Store: server". A real
WebDAV round-trip still needs the user's WebDAV config in-app; the agando space has
no _data collection yet, so GET returns 404 -&gt; "server (empty)".
</content>
</entry>
<entry>
<title>fix(newos4): predictor arithmetic, deployed-source viewer, ls text output (v4.6.57)</title>
<updated>2026-10-23T15:46:41+00:00</updated>
<author>
<name>Agando</name>
<email>roduccomm@gmail.com</email>
</author>
<published>2026-10-23T15:46:41+00:00</published>
<link rel='alternate' type='text/html' href='https://newos.webx11.duckdns.org/newos4/commit/?id=83e64b88910c952c7469cee57cc5c5a8a07ad902'/>
<id>urn:sha1:83e64b88910c952c7469cee57cc5c5a8a07ad902</id>
<content type='text'>
Acting on the "Request to the newOS4 team" packet (spaces/agando/guides/,
re-verified by its author on 4.6.56). Three verified defects fixed:

Packet 5 (predictor arithmetic) - module-predictor.js
- the persisted field named mape held a SUM while predictor-status divided by the
  paired count: renamed to errorSum, older payloads read through
- errorPct is stored raw; the 500% clamp is now render-only, so a 475x miss stays
  visible instead of being flattened to the ceiling
- predictions are floored at 1 s and marked floored; a floored prediction is
  consumed but never scored as 100% error (a 0 s prediction is not a prediction)
- observations shorter than 1.5 s (aborted/instant runs) are marked unusable and
  no longer train _findSimilar - one 0.079 s run was rounding the next prediction
  to 0 s
- status prints an unpaired and an unscored count alongside the mean

Packet 10 (verification cannot see its own fixes) - module-aiassist.js
- view_module now returns the DEPLOYED source, prefixed with file and version,
  and only falls back to the _mods copy with a "may be stale" banner. The
  unversioned _mods/&lt;Class&gt;.js edit cache used to shadow the deployed file
  forever, so the viewer showed pre-fix code while the bundle was new.
  Proven by seeding a stale _mods/PredictorModule.js and calling the tool.

Packet 1b (ls exits clean with no output) - module-fs.js
- ls rendered only via printClickable(), which writes straight to the DOM, so any
  capture (AI run_command, diagnostics) saw an empty result and reported "empty
  directory". It now always prints a text line and keeps the clickable chips when
  nothing is capturing.

Test: modules/test/test-predictor-accuracy.js 34/34 (new cases Q, R, S).
</content>
</entry>
<entry>
<title>fix(newos4): measure predictor accuracy over paired predictions (v4.6.56)</title>
<updated>2026-10-23T15:38:10+00:00</updated>
<author>
<name>Agando</name>
<email>roduccomm@gmail.com</email>
</author>
<published>2026-10-23T15:38:10+00:00</published>
<link rel='alternate' type='text/html' href='https://newos.webx11.duckdns.org/newos4/commit/?id=895d8f5ed57c76f25770f88f290e6ab93949b6f8'/>
<id>urn:sha1:895d8f5ed57c76f25770f88f290e6ab93949b6f8</id>
<content type='text'>
The accuracy readout was structurally 0%: module-predictor.js:187 incremented the
denominator on every observed run while the numerator only moved when a stored
prediction existed, and predictions were stored only by the manual `predict`
command (the AI tool predict_task computed one and discarded it). Replaying the
AI loop's own call path with 6 tasks printed "Predictions made: 0, Accuracy: 0/6".

- pending predictions with a 15m TTL, consumed by threaded id -&gt; task hash -&gt;
  cli-only similarity &gt;= 0.5; unpaired runs never enter the denominator
- duration scored within 30% or 3s (integer predictions vs fractional observations)
- errorPct capped at 500% so one miss cannot poison the mean error
- schema v2: v1 correct/total counters dropped on load, observed runs and the
  prediction counter kept; task text stored as an FNV-1a hash only
- tuning (confidence-threshold, min-data-points, pair-ttl) persists
- min-data-points now scales confidence (was declared, printed, settable, unread)
- AI loop registers a prediction per turn and threads its id; predict_task
  returns predictionId; durations exclude chat-lock queue wait
- status/dashboard say "n/a" instead of "N/A%", and carry paired count, mean
  error, turns error, pending and unpaired counts
- test: modules/test/test-predictor-accuracy.js (26 assertions)

Live on main.html v4.6.56: fresh session -&gt; "Accuracy: n/a (0/0 paired)";
one paired run -&gt; "100% (1/1 paired) - mean error 5% - turns +-0.0".
</content>
</entry>
<entry>
<title>auto: 2026-06-06_18:01 changes</title>
<updated>2026-06-06T16:01:01+00:00</updated>
<author>
<name>Agando</name>
<email>roduccomm@gmail.com</email>
</author>
<published>2026-06-06T16:01:01+00:00</published>
<link rel='alternate' type='text/html' href='https://newos.webx11.duckdns.org/newos4/commit/?id=021aa37d540353553bc60c28d78e35c828c58458'/>
<id>urn:sha1:021aa37d540353553bc60c28d78e35c828c58458</id>
<content type='text'>
</content>
</entry>
<entry>
<title>auto: 2026-06-05_18:01 changes</title>
<updated>2026-06-05T16:01:01+00:00</updated>
<author>
<name>Agando</name>
<email>roduccomm@gmail.com</email>
</author>
<published>2026-06-05T16:01:01+00:00</published>
<link rel='alternate' type='text/html' href='https://newos.webx11.duckdns.org/newos4/commit/?id=b538577cd0a4292e4cd4ca1c9f9829fc7e133caa'/>
<id>urn:sha1:b538577cd0a4292e4cd4ca1c9f9829fc7e133caa</id>
<content type='text'>
</content>
</entry>
</feed>
