AUIS revival

Artifact [23c8ac51a5]
Login

Artifact 23c8ac51a5611abab771eb72a2ac6d41add9080df917e4e8072c3d084d33b64d:


AUIS Revival Roadmap

Last updated: 2026-08-17

This document is intended primarily for AUIS revival participants, with a summary of what's running, what's active, what's next, and the high level rationale for the various tradeoffs made.

You can make a deep dive into the details in the documents below:

Doc Description
revival.md What's been accomplished, told as a narrative, for readers who already know AUIS or are meeting it for the first time
porting-assessment.md Bug-class root-cause analysis and the full ANSI C conversion plan
porting-changelog.md Dated log of every fix
claude-history/README.md Index of retired working docs — task prompts, investigation write-ups, rollout runbooks, and this document's full pre-2026-08-07 history (roadmap-old.md)
quickstart.md Build and run instructions
mail-quickstart.md IMAP/SMTP mail setup

Status

ez, help, and messages all run. The codebase has been through a multi-month modernization effort — what that involved and why is in Key tradeoffs, below — which is now done for its original scope. Most applications and insets work well; the table below tracks what's solid versus still rough. Active work is listed under Projects.


Applications and insets

Component Status Notes
ez, help Fully working
bush, org, chart, layout Fully working
messages Mostly working Runs against a local mailbox and against a live IMAP mirror, but the IMAP side still needs a manual imapsync step — see Projects → AMS over IMAP/SMTP
typescript Broken Crashes on launch: PTY allocation fails, and a missing NULL check turns that failure into a crash instead of a clean error
ness (scripting) Inert Blocked on a bison grammar extension specific to the (disabled-on-arm64) Andrew bison fork
Core embedded insets — eq, table, fad, fnote, bp, srctext, figure, value/slider/button, pushbutton/link, lset, org, apt/cel/arbiter Fully working figure has one open cosmetic bug: italic-text sizing is non-monotonic (10pt renders bigger than 12pt). eq has one open bug: deleting a multi-line equation's lines only reduces each to a single "zilch" placeholder rather than merging down to one line — a long-standing bug, not new to this port (see porting-assessment.md §23)
calc, zip (contrib) Fully working
clock Fully working
raster (as an embedded inset) Fully working
contentv (Table of Contents) Fully working An earlier report of it ignoring enumerated headings was a false alarm — root cause was input focus being inside an embedded inset rather than the document itself when the ToC view was opened
convertraster (standalone CLI) Fully working Fully tested 2026-08-08; three bugs found and fixed (see porting-changelog.md)
image (JPEG/TIFF import) Fully working Fixed 2026-08-08: TIFF import was totally broken (four LP64 struct/stride bugs in vendored libtiff); JPEG/TIFF solid-color render was an unrelated xgraphic.c variable mixup — see porting-changelog.md. GIF import shares the same render path so is likely also fixed, but wasn't retested
htmlview N/A — superseded The standalone viewer itself hasn't changed; real-world HTML mail rendering now goes through a separate, purpose-built parser+renderer wired into messages/cui instead — see Projects → HTML mail rendering. Retargeting htmlview onto that same parser is an optional later step, not yet done

Projects

Active work. Each entry starts with a short description and next step; details will fill in as each project actually unfolds, rather than being front-loaded here.

AMS over IMAP/SMTP

HTML mail rendering

Coverage inventory

Application work

Inset work


Open issues

Smaller items that don't fit the tables above.

Little annoyances - Arrow keys and a "Meta" key aren't bound yet - ~~make Clean transiently deletes src/atk/adew/Arb~~ RESOLVED 2026-08-12: this undersold it — a build had actually clobbered the tracked .ez arbiter document with the generated arb launcher (same directory entry on case-insensitive filesystems) back in June, and the corruption had been committed, not transient. Restored from the original import on both branches; Imakefile now builds the launcher under a collision-proof name and renames it only at install time. See revival.md → "Old bugs never found till now." - messages: intermittent, non-fatal X_OpenFont BadValue X errors during normal folder browsing — not root-caused - filetype.c DeleteEntry: a bogus-free risk and an apparently-inverted condition, flagged by the compiler, never observed to actually fire - runapp -d with no app-class argument segfaults instead of printing usage — pre-existing since the 1988 source, not a regression - RESOLVED 2026-08-12 (docs): a fresh checkout has two separate hardcoded-path spots, not one — site.h's DEFAULT_ANDREWDIR_ENV was documented, but config/Makefile's BASEDIR (baked in from site.h by imake at Step 2, and not reliably self-regenerated afterward — see the fossil-mtime caveat elsewhere in this file) wasn't, and silently stays stale if site.h gets fixed after Step 2 has already run once. Reported independently by an outside builder hitting exactly this. quickstart.md's "Site configuration" section now covers both. - Clicking a scrollbar endzone to jump to the end of a document cycles through 3 distinct results rather than settling — root cause identified (textview's endzone()/setframe(), src/atk/text/textv.c, fires a second chained scroll operation on every discrete click, not just a held-down repeat), not yet fixed. Found chasing an HTML-mail-rendering report but is a general ATK scrollbar bug, not HTML-specific. See revival.md → "Open issues" for the full writeup.

Heisenbugs (intermittent, low reproducibility) - Xlib display-lock self-deadlock: reproduced once, root cause identified (_XLockDisplay re-entered from inside XRefreshKeyboardMapping, triggered by a keyboard-mapping-change event) but not yet fixed. Current best explanation for the older, harder-to-pin-down "^V scroll hang." - A rare report of text drawing into the menu area — not reproduced since first observed - Menu-bar posting sometimes takes a fixed ~510ms quantum to draw (perceived multi-second delays are two or more of these back-to-back, not one longer stall): root cause confirmed 2026-08-11, not an AUIS defect, no fix available or needed. Live process sampling of XQuartz's own X11.bin, correlated directly against mdbg-logged stall timestamps, showed real dispatch time (~1278ms) closely matching independently measured stall time (1533ms across 3 stalls in the same window) inside one specific chain: ProcClearToBackground (servicing DrawMenuItems's XClearWindow) → RootlessStartDrawingxp_lock_windowSLSConnectionSynchronizeSLSCATransaction_SLSTransactionWaitSource — XQuartz blocked waiting for macOS's own SkyLight/Core Animation window compositor to synchronize a transaction before it's allowed to lock the popup window's backing store and paint. This is genuine, external, server-side latency in XQuartz's rootless-drawing pipeline, confirmed unrelated to AUIS's XGrabPointer usage (already ruled out) and to App Nap or frontmost/background app status (both tested and ruled out as the why behind the ~510ms specifically). The why the wait is sometimes instant and sometimes ~510ms remains unresolved (some undocumented SkyLight/WindowServer-internal cadence, not app-focus-dependent) but the where is proven and outside AUIS's or XQuartz's control — treated as an accepted characteristic of XQuartz on modern macOS, not pursued further absent a second X server or SkyLight documentation. See porting-assessment.md → "Intermittent ~500ms menu-bar posting delay" for the full inventory. Diagnostic tracing left in the tree, off by default (MenuDebugTrace profile switch; MENUDBGTRACE env var for the popup-menu path), now timestamped for future correlation work.


Key tradeoffs

Modernization strategy — how the code itself was brought forward:

Scope decisions — what's deliberately not part of this build:

Mail architecture — how AMS talks to the outside world:


Major milestones


Stretch goals


Further reading

Testing procedure material that used to live in this file (the subsystem dependency lattice, the per-inset test-document table, the regression checklists) is preserved in claude-history/README.md → "Retired top-level docs" → roadmap-old.md. It may get a dedicated home of its own in a later documentation pass rather than staying only in the retired file.