Sol-37 Manual / Machine State

Site Server README

Sol-37 is a static archive shell with a live service spine. The shell is what visitors see, but the real system includes Caddy, Cloudflare, IRC-backed logbook services, a read-only knowledge query API, generated site indexes, traffic snapshots, and media watchers. This page documents the stack as it exists now instead of pretending it is cleaner than it is.

Local Origin 127.0.0.1:8888
Public Host sol.system42.one
Site Root random/www
Mode Static + Daemons

Archive reference: committed base tag sol37-audit-2026-04-13; machine-state note at /home/david/random/docs/archive-points/sol37-archive-2026-04-13.md.

What It Is

The site is a Windows 95 style operating environment wrapped around a public archive. It is not a framework app and not a CMS. The shell in index.html opens document windows, program windows, archive views, and runtime-backed tools over a mostly static filesystem.

What Makes It Live

Several features only work because local services and timers are running: traffic monitor snapshots, site index refreshes, public logbook APIs, the Sol chat API plus model backend, read-only semantic search, GUI share metadata, IRC logging, Cloudflare publishing, and media playlist rebuilds.

Shell Layer

The shell behaves like a tiny operating system: desktop icons, Start menu, taskbar buttons, draggable windows, maximize/minimize controls, a command prompt, and iframe-backed program surfaces.

Program Layer

Embedded pages are not all passive documents. The site map, logbook, media player, star map, and DOSBox each bring their own interaction model inside the shell window.

Share Layer

The alternate /gui entry can open a specific shell window directly via share links. Shared GUI links preserve the target page, can also preserve maximized state when copied from a maximized window, and now receive entry-specific social metadata while keeping the raw /gui?i=... URL shape. The floating desktop assistant stays hidden by default on shared links unless assistant=1 is added.

Visitor Surfaces

  • index.html for the retro desktop shell
  • chat/ for the public Sol chat console
  • sitemap.html for archive browsing
  • site-metrics.html for traffic and telemetry
  • programs/logbook.html for the public logbook
  • programs/media-player.html for video and audio playback
  • programs/dosbox.html for the DOS sandbox surface

Generated Artifacts

  • site-index.json from the site-index watcher
  • knowledge-index.json from the knowledge/site index bridge
  • site-metrics.json from the traffic snapshot generator
  • video/playlist.json and audio/playlist.json from the media watchers
  • pre-rendered GUI share screenshots under assets/share-previews/
  • synthetic logbook state merged into the public logbook experience

Transport Layer

  • Caddy serves the local origin
  • Cloudflare tunnel publishes the public host
  • ngircd backs the local IRC transport
  • Caddy rewrites /chat to /chat/index.html and marks the chat surface no-store to avoid stale mobile assets
  • Caddy reverse-proxies /api/chat/* to the local Sol chat API
  • Caddy reverse-proxies /api/logbook/* to the Python API
  • Caddy reverse-proxies /api/knowledge/* to the read-only semantic search API

Service Stack

  • caddy-sol37.service
  • pkd-cloudflared-quick-tunnel.service
  • public-logbook-api.service
  • public-logbook-irc-logger.service
  • knowledge-query-api.service
  • sol-chat-api.service
  • sol-chat-model.service
  • sol37-gui-share.service
  • site-index-watch.service
  • video-playlist-watch.service
  • audio-playlist-watch.service
  • site-metrics-snapshot.timer
  • synthetic-logbook-snapshot.timer
  • ngircd.service as the system IRC daemon

Boot Behavior

User services are configured in ~/.config/systemd/user and now survive reboot through user linger. The critical machine fact is simple: without loginctl enable-linger david, the stack would wait for a login and quietly fail the illusion of being a server.

Sol Chat Surface

The dedicated /chat page is now the public Sol console rather than a placeholder widget. It uses the same Sol orb vocabulary as the desktop assistant, keeps the browser on same-origin routes, and exposes voice controls plus site-wide debug metrics.

  • session persistence through sol_session
  • voice playback through /api/chat/speak
  • retrieval-grounded replies through /api/chat
  • optional shared-window page context passed from /gui?i=...&assistant=1 into /api/chat
  • assistant suggestion chips recomputed from the shared page title, headings, and extracted content
  • debug/metrics console backed by site-metrics.json

Chat Freshness Guard

A real failure mode appeared on mobile: the HTML for /chat updated, but public chat.js and chat.css stayed cached long enough to make the page look and behave like an older build.

  • www/chat/index.html now uses versioned asset URLs
  • Caddy marks /chat and /chat/* as Cache-Control: no-store
  • the check script is bin/check_sol_chat_asset_versioning.py

Media Reality

The media player is currently functioning well in live use, but it remains the least trustworthy subsystem in the stack. Public playback quality is shaped by both player behavior and the tunnel/range-request path, especially for large audio and video payloads.

Archive Discipline

This machine now has an explicit audit-era archive point. Use the tag and archive note above when you need to distinguish committed history from the larger working-tree/runtime state that was live during review.

Traffic Monitor Semantics

The traffic monitor is honest about what it measures. It reports the current access-log window, not all-time traffic. It now separates raw host hits from visible archive hits and shows suppressed polling paths so the smaller number does not masquerade as the whole story.

Sensor Mirror

The monitor also mirrors the same Home Assistant and local system readouts used by MasterBot: ambient temperature, particulate, light, Apollo presence data, uptime, CPU temp, and GPU temp.

Knowledge API

The public semantic search surface is read-only and intentionally plain. It exposes GET /api/knowledge/query and GET /api/knowledge/health through the same host as the site instead of hiding behind a separate API domain.

  • Health: https://sol.system42.one/api/knowledge/health
  • Query: https://sol.system42.one/api/knowledge/query?query=hello%20friend&top_k=3
  • OpenAPI schema: https://sol.system42.one/knowledge-openapi.json
  • Privacy policy: https://sol.system42.one/privacy.html

Browser-Only Use

A browser address bar is enough. Because the public route is GET-only, you can paste a query URL directly into a browser and receive raw JSON with no extra client, auth flow, or SDK.

Example: https://sol.system42.one/api/knowledge/query?query=what%20is%20Sol%3F&top_k=2

Query Cache Behavior

The site keeps a backend-specific query-embedding sidecar so repeated identical queries do not need a fresh upstream embedding request every time.

  • First new query: embed once, persist vector, then search
  • Repeated identical query: reuse cached vector, skip upstream embedding call
  • Document embeddings still live in the main backend cache built by sol_ingest

Observed Example

Live service run on 2026-04-15 for Sol knowledge API:

  • first request: query_cache_hit: false, about 3149.48ms
  • second identical request: query_cache_hit: true, about 11.65ms
  • health then reported one cached query entry in the OpenAI sidecar

Paths Worth Knowing

/home/david/random/www/index.html /home/david/random/www/sitemap.html /home/david/random/www/site-metrics.html /home/david/random/www/site-server.html /home/david/random/www/README.md /home/david/random/www/chat/index.html /home/david/random/www/chat/chat.css /home/david/random/www/chat/chat.js /home/david/random/www/knowledge-openapi.json /home/david/random/www/privacy.html /home/david/random/www/programs/logbook.html /home/david/random/www/programs/media-player.html /home/david/random/www/programs/star-map.html /home/david/random/www/posts/index.json /home/david/random/www/audio/playlist.json /home/david/random/www/video/playlist.json /home/david/random/bin/Caddyfile.pkd_share /home/david/random/bin/site_metrics_snapshot.py /home/david/random/bin/site_index_snapshot.py /home/david/random/bin/public_logbook_api.py /home/david/random/bin/public_logbook_irc_logger.py /home/david/random/bin/knowledge_query_api.py /home/david/random/bin/sol_chat_api.py /home/david/random/bin/check_sol_chat_asset_versioning.py /home/david/random/bin/sol37_gui_share_server.py /home/david/random/bin/video_playlist_watch.py /home/david/random/bin/audio_playlist_watch.py

Operational Character

Sol-37 is deliberately hybrid. Some pages are just files. Some pages are generated. Some windows are backed by live daemons. Some content is synthetic by design. The system works best when those layers stay visible instead of being flattened into marketing language about a “website.”