# Launch report — AutoScholar.ai (draft, 2026-10-30) This report separates what was **verified on real infrastructure** from what is **blocked** or **untested**. It is finalised after the milestone runs complete (see the "Live research runs" section of docs/TEST_REPORT.md). ## URLs and services | Item | Value | State | |---|---|---| | Public site | https://autoscholar.ai | **blocked by DNS** — the GoDaddy zone has no A record for the apex (see below); the tunnel route and Caddy configuration are in place and will serve as soon as `A @ → 51.161.112.61` exists | | LAN access (operator) | http://192.168.2.85:8470 (M3U96b) | serving (public pages, admin, APIs) | | Admin console | `/admin` | serving; bootstrap password rotated 2026-10-30 | | Control plane processes | pm2 `autoscholar`, `autoscholar-scheduler`, `autoscholar-backup` on M3U96b | online | | Research worker | M4M64c, LaunchDaemon `io.autoscholar.worker`, user `asworker` | online, enrolled, sandbox available | | Database | PostgreSQL 17 `autoscholar` on M3U96b | migrated (42 tables), nightly dump + offsite copy on M3U96a | | Artifact store | `M3U96b:~/apps/autoscholar-data/artifacts` | private `runs/`, public `public/` | | Source of truth | `M3U96b:~/apps/autoscholar` (git, origin spbgit `autoscholar.git`) | adopted by mld | ## Verified end to end (real infrastructure) - Admin sign-in with `admin123` → forced rotation → `admin123` rejected (production, 2026-10-30). - Upload of a research `CLAUDE.md` → immutable version with SHA-256 → idempotent launch (second identical launch returned the same run, HTTP 200). - A real MacLustr worker (M4M64c, dedicated low-privilege user) leased the job, created an isolated workspace, loaded the frozen `CLAUDE.md` as project instructions (passphrase self-test), ran Claude Agent SDK sessions per stage, streamed structured events to the admin timeline, uploaded hashed artifacts, and verified real references through Crossref during the literature stage. - Enforcement: writes outside the workspace, LAN access and non-research tools were denied by the platform hook and the Seatbelt sandbox even when the instructions requested them (self-test transcript in TEST_REPORT.md). - Crash recovery: an HTTP 500 in the control plane during attempt 1 made the worker report a failed attempt; the scheduler re-queued the run and the worker resumed from the preflight checkpoint on attempt 2 with a new fencing token. The 500 (write-once artifact collision) was fixed and redeployed with a ~5 s gap. - Invalid brief (clinical trial on patients, fabricated data, skipped review): preflight judged it infeasible; the run ended `failed` after USD 0.13 and never appeared publicly. - Backup and isolated restore test executed; digests verified. ## Blocked / needs the founder 1. **DNS**: restore `A autoscholar.ai → 51.161.112.61` at GoDaddy (the record present at discovery disappeared the same day; serial 2026103001). Optional: `A www → 51.161.112.61` then `mlt redirect www.autoscholar.ai autoscholar.ai` (or the reverse). 2. Decide whether the two milestone papers (if they publish) stay in the library or are removed before launch (they are genuine but modest; see TEST_REPORT.md). ## Not done / limitations - No MFA (schema ready). No mTLS (LAN tokens). No Linux containers on MacLustr (Seatbelt + user isolation instead). - Provider spend is the SDK client-side estimate. - Only one worker (M4M64c) is enrolled; onboarding another node takes one installer run (docs/OPERATIONS.md). ## Next priorities 1. DNS fix → public HTTPS smoke test (`curl -I https://autoscholar.ai`, admin login over HTTPS, PDF download). 2. Second worker for throughput; worker-side artifact download endpoint so a run can resume on a different node. 3. MFA (TOTP) for the admin account; alerting hook (e.g., e-mail/Slack) on `failed`/`quality_failed`.