pdfjs-dist 6.4 (advisory GHSA-hq66-cqwq-w95j), founder guide, launch report draft
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
5 changed files +133 −56
added
docs/FOUNDER_GUIDE.md
+38 −0
@@ -0,0 +1,38 @@ | |||||
| 1 | +# Founder guide — operating AutoScholar.ai | ||||
| 2 | + | ||||
| 3 | +One person operates the foundry. Everything happens in the admin console at `https://autoscholar.ai/admin` (LAN fallback: `http://<M3U96b LAN IP>:8470/admin`). | ||||
| 4 | + | ||||
| 5 | +## 1. First sign-in | ||||
| 6 | +- Username `admin`, bootstrap password `admin123` — valid **only until the first sign-in**. You are forced to choose a strong password (≥ 12 chars, three character classes, not the bootstrap one, never reused). All other sessions are revoked. The rotation was already performed on 2026-10-30; the current password is in the operator's secrets folder. | ||||
| 7 | +- Sessions last 12 h (2 h idle). Five failed logins lock the account (1 min, doubling up to 1 h). All events are in *Settings & security → Audit log*. | ||||
| 8 | + | ||||
| 9 | +## 2. Write a research brief | ||||
| 10 | +Start from *Templates* (general, empirical, theoretical, computational, review) — "Use this template" prefills *New research*. Follow `docs/RESEARCH_INSTRUCTIONS_GUIDE.md`: one precise question, mode, verified-source rules, data/proof foundations, pre-registered procedure, robustness, acceptance criteria. Briefs that target the platform (sudo, SSH, credentials, "ignore the rules") are rejected at upload; briefs that require regulated activities fail at preflight with the reason shown in the run timeline. | ||||
| 11 | + | ||||
| 12 | +## 3. Launch | ||||
| 13 | +*New research* → upload `.md`/`.txt` or paste → **Validate & freeze** (exact bytes + SHA-256 stored as an immutable version; warnings list missing sections) → choose discipline, mode, secondary modes, compute profile, budget cap (USD), runtime cap (minutes), attempts, auto-publish → **Launch on MacLustr**. The button carries an idempotency key: refreshing or double-clicking cannot create a second run. You get a run ID immediately; close the browser whenever you like. | ||||
| 14 | + | ||||
| 15 | +## 4. Monitor | ||||
| 16 | +*Runs → run*: live timeline (reconnects automatically), stage progress (preflight → framing → literature → design → execute → robustness → manuscript → review → reproduction → quality → publication), cost vs cap, attempts, policy denials, artifacts (download any file). *MacLustr*: worker health, heartbeat age, sandbox status, running jobs; **drain** a worker before maintenance, **quarantine** a misbehaving one. *Cancel* stops a run cooperatively (its logs and frozen input stay); *Retry* grants one more attempt resuming from the last checkpoint. | ||||
| 17 | + | ||||
| 18 | +## 5. Review quality | ||||
| 19 | +*Quality → run*: every deterministic gate with evidence (hard gates block publication; soft gates warn), the automated referee's findings and resolution states, the rubric scores and the publication decision. Hard scientific blockers (unverified citations, untraceable numbers, missing PDF, synthetic data, secrets, simulated worker) **cannot be overridden**. Other failures can be overridden with a written rationale, which moves the run to *awaiting approval*. | ||||
| 20 | + | ||||
| 21 | +## 6. Publish, correct, retract | ||||
| 22 | +- Auto-publish: when enabled on the run and permitted for the mode/discipline, a run that passes all hard gates is published by the scheduler within seconds — public page `/research/<slug>`, PDF, LaTeX source, code/data when present, citations, provenance. | ||||
| 23 | +- Manual: *Publications → Publish* for runs awaiting approval; "publish as correction of …" creates version n+1 of an existing paper (history preserved). | ||||
| 24 | +- *Retract* writes a permanent notice; *Withdraw artifacts* stops file delivery (HTTP 410) while keeping the notice and the private audit copy; *Edit metadata* records a versioned change. | ||||
| 25 | + | ||||
| 26 | +## 7. Emergency controls (*Settings & security*) | ||||
| 27 | +- **Pause dispatch** — no new research starts; running jobs continue. | ||||
| 28 | +- **Halt publishing** (global or per mode) — passing runs wait in *awaiting approval*. | ||||
| 29 | +- Worker drain/quarantine; provider availability; env-level switches `DISPATCH_ENABLED=0` / `PUBLISHING_ENABLED=0` (restart required). | ||||
| 30 | + | ||||
| 31 | +## 8. Costs | ||||
| 32 | +Each run's budget cap is enforced per stage by the Agent SDK and across stages by the runner; the scheduler enforces the runtime cap. Spend shown is the SDK's client-side estimate (not the invoice). Typical small study: USD 5–25. | ||||
| 33 | + | ||||
| 34 | +## 9. When something fails | ||||
| 35 | +- Preflight `INFEASIBLE` → the brief needs changes (see reason). No retry is attempted. | ||||
| 36 | +- `quality_failed` → open *Quality*, read the hard failures, retry (a new attempt revises from the checkpoint) or fix the brief and relaunch. | ||||
| 37 | +- Worker offline → queued runs wait; running runs resume on the next heartbeat window from their last checkpoint. | ||||
| 38 | +- Operations, backups and restore: `docs/OPERATIONS.md`. | ||||
added
docs/LAUNCH_REPORT.md
+39 −0
@@ -0,0 +1,39 @@ | |||||
| 1 | +# Launch report — AutoScholar.ai (draft, 2026-10-30) | ||||
| 2 | + | ||||
| 3 | +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). | ||||
| 4 | + | ||||
| 5 | +## URLs and services | ||||
| 6 | + | ||||
| 7 | +| Item | Value | State | | ||||
| 8 | +|---|---|---| | ||||
| 9 | +| 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 | | ||||
| 10 | +| LAN access (operator) | http://192.168.2.85:8470 (M3U96b) | serving (public pages, admin, APIs) | | ||||
| 11 | +| Admin console | `/admin` | serving; bootstrap password rotated 2026-10-30 | | ||||
| 12 | +| Control plane processes | pm2 `autoscholar`, `autoscholar-scheduler`, `autoscholar-backup` on M3U96b | online | | ||||
| 13 | +| Research worker | M4M64c, LaunchDaemon `io.autoscholar.worker`, user `asworker` | online, enrolled, sandbox available | | ||||
| 14 | +| Database | PostgreSQL 17 `autoscholar` on M3U96b | migrated (42 tables), nightly dump + offsite copy on M3U96a | | ||||
| 15 | +| Artifact store | `M3U96b:~/apps/autoscholar-data/artifacts` | private `runs/`, public `public/` | | ||||
| 16 | +| Source of truth | `M3U96b:~/apps/autoscholar` (git, origin spbgit `autoscholar.git`) | adopted by mld | | ||||
| 17 | + | ||||
| 18 | +## Verified end to end (real infrastructure) | ||||
| 19 | +- Admin sign-in with `admin123` → forced rotation → `admin123` rejected (production, 2026-10-30). | ||||
| 20 | +- Upload of a research `CLAUDE.md` → immutable version with SHA-256 → idempotent launch (second identical launch returned the same run, HTTP 200). | ||||
| 21 | +- 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. | ||||
| 22 | +- 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). | ||||
| 23 | +- 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. | ||||
| 24 | +- 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. | ||||
| 25 | +- Backup and isolated restore test executed; digests verified. | ||||
| 26 | + | ||||
| 27 | +## Blocked / needs the founder | ||||
| 28 | +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). | ||||
| 29 | +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). | ||||
| 30 | + | ||||
| 31 | +## Not done / limitations | ||||
| 32 | +- No MFA (schema ready). No mTLS (LAN tokens). No Linux containers on MacLustr (Seatbelt + user isolation instead). | ||||
| 33 | +- Provider spend is the SDK client-side estimate. | ||||
| 34 | +- Only one worker (M4M64c) is enrolled; onboarding another node takes one installer run (docs/OPERATIONS.md). | ||||
| 35 | + | ||||
| 36 | +## Next priorities | ||||
| 37 | +1. DNS fix → public HTTPS smoke test (`curl -I https://autoscholar.ai`, admin login over HTTPS, PDF download). | ||||
| 38 | +2. Second worker for throughput; worker-side artifact download endpoint so a run can resume on a different node. | ||||
| 39 | +3. MFA (TOTP) for the admin account; alerting hook (e.g., e-mail/Slack) on `failed`/`quality_failed`. | ||||
modified
pnpm-lock.yaml
+53 −53
@@ -238,8 +238,8 @@ importers: | |||||
| 238 | specifier: ^1.17.1 | 238 | specifier: ^1.17.1 | ||
| 239 | version: 1.17.1 | 239 | version: 1.17.1 | ||
| 240 | pdfjs-dist: | 240 | pdfjs-dist: | ||
| 241 | − specifier: ^5.4.0 | 241 | + specifier: ^6.2.108 | ||
| 242 | − version: 5.7.284 | 242 | + version: 6.4.299 | ||
| 243 | zod: | 243 | zod: | ||
| 244 | specifier: ^4.1.0 | 244 | specifier: ^4.1.0 | ||
| 245 | version: 4.6.7 | 245 | version: 4.6.7 | ||
@@ -1150,79 +1150,79 @@ packages: | |||||
| 1150 | '@cfworker/json-schema': | 1150 | '@cfworker/json-schema': | ||
| 1151 | optional: true | 1151 | optional: true | ||
| 1152 | 1152 | ||||
| 1153 | − '@napi-rs/canvas-android-arm64@0.1.100': | 1153 | + '@napi-rs/canvas-android-arm64@1.0.13': | ||
| 1154 | − resolution: {integrity: sha512-hjhCKhntPv9+t4ckHymdx0phYNcVW+GKQR6Lzw2zE+pOVjOplSmtx9nNNknTjbEDLcuLZqA1y8ufKg1XfgftzQ==} | 1154 | + resolution: {integrity: sha512-trn7AaDzQ+yeeA0ezhkC7cB1ZDPtp4UYk0EvB5F8qtYL9jEVWtVrU30WOpI52DszoTxaTsCgf5PP4ZVaOlOIHQ==} | ||
| 1155 | engines: {node: '>= 10'} | 1155 | engines: {node: '>= 10'} | ||
| 1156 | cpu: [arm64] | 1156 | cpu: [arm64] | ||
| 1157 | os: [android] | 1157 | os: [android] | ||
| 1158 | 1158 | ||||
| 1159 | − '@napi-rs/canvas-darwin-arm64@0.1.100': | 1159 | + '@napi-rs/canvas-darwin-arm64@1.0.13': | ||
| 1160 | − resolution: {integrity: sha512-2PcswRaC7Ly645DGt88///zuFDhJxJYdKAs1uU3mfk1atYkXufgcgLfBpk6Tm12nCQBaNt1wpybuPZ4qOhTo8A==} | 1160 | + resolution: {integrity: sha512-6Y2djEetL8copxfNK6hg7oig/xqTwOchv19hBOm+zBNdKc/02Z3kjZN5wrLzv/l5O04/bAQS6I/AlQpwBlXgPg==} | ||
| 1161 | engines: {node: '>= 10'} | 1161 | engines: {node: '>= 10'} | ||
| 1162 | cpu: [arm64] | 1162 | cpu: [arm64] | ||
| 1163 | os: [darwin] | 1163 | os: [darwin] | ||
| 1164 | 1164 | ||||
| 1165 | − '@napi-rs/canvas-darwin-x64@0.1.100': | 1165 | + '@napi-rs/canvas-darwin-x64@1.0.13': | ||
| 1166 | − resolution: {integrity: sha512-ePNZtj7pNIva/siZMg+HmbeozkIjqUIYdoymH8HaA3qK7LfzFN4WMBM8G6HQ9ZC+H3+Dnn5pqtiXpgLykaPOhw==} | 1166 | + resolution: {integrity: sha512-OZoPwwu4TMMg8GTCFBrg8UFExwQTU/55i3uTC/izDat6PHE+ro9dimyQoOboFf91+NY7Pnn70ScR8f8I8+eZXw==} | ||
| 1167 | engines: {node: '>= 10'} | 1167 | engines: {node: '>= 10'} | ||
| 1168 | cpu: [x64] | 1168 | cpu: [x64] | ||
| 1169 | os: [darwin] | 1169 | os: [darwin] | ||
| 1170 | 1170 | ||||
| 1171 | − '@napi-rs/canvas-linux-arm-gnueabihf@0.1.100': | 1171 | + '@napi-rs/canvas-linux-arm-gnueabihf@1.0.13': | ||
| 1172 | − resolution: {integrity: sha512-d5cDB48oWFGU8/XPhUOFAlySgb/VAu7D+s8fi55K1Pcfg8aPplHWqMgibhVLU8ky7Pyg/fuiVLz4Nf3JrSTuUA==} | 1172 | + resolution: {integrity: sha512-dZSYaKROuswU2eUWG5aBKndNVe68elo1YX93xtRax7q658tj8rYE+HwduovWJgs6qwv1r1/CLR60nDeBbyjvyg==} | ||
| 1173 | engines: {node: '>= 10'} | 1173 | engines: {node: '>= 10'} | ||
| 1174 | cpu: [arm] | 1174 | cpu: [arm] | ||
| 1175 | os: [linux] | 1175 | os: [linux] | ||
| 1176 | 1176 | ||||
| 1177 | − '@napi-rs/canvas-linux-arm64-gnu@0.1.100': | 1177 | + '@napi-rs/canvas-linux-arm64-gnu@1.0.13': | ||
| 1178 | − resolution: {integrity: sha512-rDxgxRu69RvDlX/bh9o22DxLsGr8EqsNgotL9+RwQE1S0b0cqeatqsw6aW45mukm0B42DIAaAacKaYQ8cqS1nw==} | 1178 | + resolution: {integrity: sha512-W6FzYE8ADHI93In1vi80KBL6btDtAMuj50Ch5ptkWS8xuntyzbR4h5JDUmXoakxZn2yMInksudTEqVSWoFqFGg==} | ||
| 1179 | engines: {node: '>= 10'} | 1179 | engines: {node: '>= 10'} | ||
| 1180 | cpu: [arm64] | 1180 | cpu: [arm64] | ||
| 1181 | os: [linux] | 1181 | os: [linux] | ||
| 1182 | libc: [glibc] | 1182 | libc: [glibc] | ||
| 1183 | 1183 | ||||
| 1184 | − '@napi-rs/canvas-linux-arm64-musl@0.1.100': | 1184 | + '@napi-rs/canvas-linux-arm64-musl@1.0.13': | ||
| 1185 | − resolution: {integrity: sha512-K3mDW66N+xT2/V439u1alFANiBUjdEx2gLiNYnCmUsva5jZMxWTjafBYwTzYK+EMFMHrUoabuU+T1BIP5CgbYQ==} | 1185 | + resolution: {integrity: sha512-+6fQ+rR49hkAa4voh2stLIwQ+4t+gmoseM8Bc53/DlMXb73IKymDPWK9A/NtWeqTW4ijWppYuyuxS2hPI8tzNA==} | ||
| 1186 | engines: {node: '>= 10'} | 1186 | engines: {node: '>= 10'} | ||
| 1187 | cpu: [arm64] | 1187 | cpu: [arm64] | ||
| 1188 | os: [linux] | 1188 | os: [linux] | ||
| 1189 | libc: [musl] | 1189 | libc: [musl] | ||
| 1190 | 1190 | ||||
| 1191 | − '@napi-rs/canvas-linux-riscv64-gnu@0.1.100': | 1191 | + '@napi-rs/canvas-linux-riscv64-gnu@1.0.13': | ||
| 1192 | − resolution: {integrity: sha512-mooqUBTIsccZpnoQC4NgrC1v6C1vof39etLNMnBwCY+p0gajWJvAHLGQ6g/gGyS5YrpDW+GefSN4+Cvcr08UWw==} | 1192 | + resolution: {integrity: sha512-17XEMO3t9RW/TtHtSFf2AkaSWuCWdzbPeidz7zrOFawHxoLSJCnpTI1hN5aUvrZNnkNNmt/vZVJCh0ryUaik3A==} | ||
| 1193 | engines: {node: '>= 10'} | 1193 | engines: {node: '>= 10'} | ||
| 1194 | cpu: [riscv64] | 1194 | cpu: [riscv64] | ||
| 1195 | os: [linux] | 1195 | os: [linux] | ||
| 1196 | libc: [glibc] | 1196 | libc: [glibc] | ||
| 1197 | 1197 | ||||
| 1198 | − '@napi-rs/canvas-linux-x64-gnu@0.1.100': | 1198 | + '@napi-rs/canvas-linux-x64-gnu@1.0.13': | ||
| 1199 | − resolution: {integrity: sha512-1eCvkDCazm7FFhsT7DfGOdSaHgZVK3bt/dSBl5EWHOWmnz+I7j8tPseJqqD81NF+MH21jKUK4wQSDjN0mdhnTg==} | 1199 | + resolution: {integrity: sha512-lc48IwknVHBsNzXn9Xs5OkUsRX38Ml3Z1aOybQ51mMEzZckm8+4A0qROlyYHEoBPzr1kL3IU8ZUAqDb7wtdX8w==} | ||
| 1200 | engines: {node: '>= 10'} | 1200 | engines: {node: '>= 10'} | ||
| 1201 | cpu: [x64] | 1201 | cpu: [x64] | ||
| 1202 | os: [linux] | 1202 | os: [linux] | ||
| 1203 | libc: [glibc] | 1203 | libc: [glibc] | ||
| 1204 | 1204 | ||||
| 1205 | − '@napi-rs/canvas-linux-x64-musl@0.1.100': | 1205 | + '@napi-rs/canvas-linux-x64-musl@1.0.13': | ||
| 1206 | − resolution: {integrity: sha512-20arT6lnI19S68qNlii73TSEDbECNgzMz2EpldC1V3mZFuRkeujXkcebRk0LRJe9SEUAooYiLokfMViY8IX7yA==} | 1206 | + resolution: {integrity: sha512-bGY1r26S2bs8UNFJcPWcCSNdCFbKep5PATsvtgtC9A5u6SRgr2/jJE/RlhHL5m9ZpixNDhVkLY/5h16Kx5V9YA==} | ||
| 1207 | engines: {node: '>= 10'} | 1207 | engines: {node: '>= 10'} | ||
| 1208 | cpu: [x64] | 1208 | cpu: [x64] | ||
| 1209 | os: [linux] | 1209 | os: [linux] | ||
| 1210 | libc: [musl] | 1210 | libc: [musl] | ||
| 1211 | 1211 | ||||
| 1212 | − '@napi-rs/canvas-win32-arm64-msvc@0.1.100': | 1212 | + '@napi-rs/canvas-win32-arm64-msvc@1.0.13': | ||
| 1213 | − resolution: {integrity: sha512-DZFFT1wIAg37LJw37yhMRFfjATd3vTQzjZ1Yki8u2vhO6Hi5VE6BVaGQ1aaDu7xb4iMErz+9EOwjpS7xcxFeBw==} | 1213 | + resolution: {integrity: sha512-2vRPBZoaIvJrUkDhZTE2Hn0YrnpJRCWVM3EJACoBKjuWI6WgPxGtUoRMsxRviCsyks8bKTSFdyw14CellnG2qA==} | ||
| 1214 | engines: {node: '>= 10'} | 1214 | engines: {node: '>= 10'} | ||
| 1215 | cpu: [arm64] | 1215 | cpu: [arm64] | ||
| 1216 | os: [win32] | 1216 | os: [win32] | ||
| 1217 | 1217 | ||||
| 1218 | − '@napi-rs/canvas-win32-x64-msvc@0.1.100': | 1218 | + '@napi-rs/canvas-win32-x64-msvc@1.0.13': | ||
| 1219 | − resolution: {integrity: sha512-MyT1j3mHC2+Lu4pBi9mKyMJhtP6U7k7EldY7sj/uS5gJA65gTXt8MefJQXLJo5d/vZbuWmfxzkEUNc/urV3pHA==} | 1219 | + resolution: {integrity: sha512-DUlW3lZPz63kYsf8mxgyyZuevhlH0T3/BGP9l+NazhB0F1+gL6D4hqZdnhZpw24DlWmTpATDcyYSZlJOi+DdfQ==} | ||
| 1220 | engines: {node: '>= 10'} | 1220 | engines: {node: '>= 10'} | ||
| 1221 | cpu: [x64] | 1221 | cpu: [x64] | ||
| 1222 | os: [win32] | 1222 | os: [win32] | ||
| 1223 | 1223 | ||||
| 1224 | − '@napi-rs/canvas@0.1.100': | 1224 | + '@napi-rs/canvas@1.0.13': | ||
| 1225 | − resolution: {integrity: sha512-xglYA6q3XO5P3BNJYxVZ1IV7DLVjp1Py6nwag88YntrS+3vKHyYcMqXVS4ZztJmwz2uGvz1FWhI/4LgbR5uQDA==} | 1225 | + resolution: {integrity: sha512-b87ugZpQ5ViwqVBkjervxpwa0GmJPsKHLBNoZN6GpjWeHzTbDUGryriq+2DYW2XbB+xCqSIINQysC0/I87nPbw==} | ||
| 1226 | engines: {node: '>= 10'} | 1226 | engines: {node: '>= 10'} | ||
| 1227 | 1227 | ||||
| 1228 | '@next/env@16.4.3': | 1228 | '@next/env@16.4.3': | ||
@@ -2333,8 +2333,8 @@ packages: | |||||
| 2333 | pdf-lib@1.17.1: | 2333 | pdf-lib@1.17.1: | ||
| 2334 | resolution: {integrity: sha512-V/mpyJAoTsN4cnP31vc0wfNA1+p20evqqnap0KLoRUN0Yk/p3wN52DOEsL4oBFcLdb76hlpKPtzJIgo67j/XLw==} | 2334 | resolution: {integrity: sha512-V/mpyJAoTsN4cnP31vc0wfNA1+p20evqqnap0KLoRUN0Yk/p3wN52DOEsL4oBFcLdb76hlpKPtzJIgo67j/XLw==} | ||
| 2335 | 2335 | ||||
| 2336 | − pdfjs-dist@5.7.284: | 2336 | + pdfjs-dist@6.4.299: | ||
| 2337 | − resolution: {integrity: sha512-h4EdYQczmGhbOlqc3PPZwxevn7ApdWPbovAuWXOB/DjIyigSnwfy2oze7c6mRcSr9XgLp3eN3EeL4DyySTPMFw==} | 2337 | + resolution: {integrity: sha512-AVl138zALtfaAPvADulE0PZThbYzCBS79nL4pOSL/6Sm/4AH5A21BD9VHt97OlCuzJuCpmeZtAtkinisF4Vb1g==} | ||
| 2338 | engines: {node: '>=22.13.0 || >=24'} | 2338 | engines: {node: '>=22.13.0 || >=24'} | ||
| 2339 | 2339 | ||||
| 2340 | pg-cloudflare@1.4.1: | 2340 | pg-cloudflare@1.4.1: | ||
@@ -3251,52 +3251,52 @@ snapshots: | |||||
| 3251 | transitivePeerDependencies: | 3251 | transitivePeerDependencies: | ||
| 3252 | - supports-color | 3252 | - supports-color | ||
| 3253 | 3253 | ||||
| 3254 | − '@napi-rs/canvas-android-arm64@0.1.100': | 3254 | + '@napi-rs/canvas-android-arm64@1.0.13': | ||
| 3255 | optional: true | 3255 | optional: true | ||
| 3256 | 3256 | ||||
| 3257 | − '@napi-rs/canvas-darwin-arm64@0.1.100': | 3257 | + '@napi-rs/canvas-darwin-arm64@1.0.13': | ||
| 3258 | optional: true | 3258 | optional: true | ||
| 3259 | 3259 | ||||
| 3260 | − '@napi-rs/canvas-darwin-x64@0.1.100': | 3260 | + '@napi-rs/canvas-darwin-x64@1.0.13': | ||
| 3261 | optional: true | 3261 | optional: true | ||
| 3262 | 3262 | ||||
| 3263 | − '@napi-rs/canvas-linux-arm-gnueabihf@0.1.100': | 3263 | + '@napi-rs/canvas-linux-arm-gnueabihf@1.0.13': | ||
| 3264 | optional: true | 3264 | optional: true | ||
| 3265 | 3265 | ||||
| 3266 | − '@napi-rs/canvas-linux-arm64-gnu@0.1.100': | 3266 | + '@napi-rs/canvas-linux-arm64-gnu@1.0.13': | ||
| 3267 | optional: true | 3267 | optional: true | ||
| 3268 | 3268 | ||||
| 3269 | − '@napi-rs/canvas-linux-arm64-musl@0.1.100': | 3269 | + '@napi-rs/canvas-linux-arm64-musl@1.0.13': | ||
| 3270 | optional: true | 3270 | optional: true | ||
| 3271 | 3271 | ||||
| 3272 | − '@napi-rs/canvas-linux-riscv64-gnu@0.1.100': | 3272 | + '@napi-rs/canvas-linux-riscv64-gnu@1.0.13': | ||
| 3273 | optional: true | 3273 | optional: true | ||
| 3274 | 3274 | ||||
| 3275 | − '@napi-rs/canvas-linux-x64-gnu@0.1.100': | 3275 | + '@napi-rs/canvas-linux-x64-gnu@1.0.13': | ||
| 3276 | optional: true | 3276 | optional: true | ||
| 3277 | 3277 | ||||
| 3278 | − '@napi-rs/canvas-linux-x64-musl@0.1.100': | 3278 | + '@napi-rs/canvas-linux-x64-musl@1.0.13': | ||
| 3279 | optional: true | 3279 | optional: true | ||
| 3280 | 3280 | ||||
| 3281 | − '@napi-rs/canvas-win32-arm64-msvc@0.1.100': | 3281 | + '@napi-rs/canvas-win32-arm64-msvc@1.0.13': | ||
| 3282 | optional: true | 3282 | optional: true | ||
| 3283 | 3283 | ||||
| 3284 | − '@napi-rs/canvas-win32-x64-msvc@0.1.100': | 3284 | + '@napi-rs/canvas-win32-x64-msvc@1.0.13': | ||
| 3285 | optional: true | 3285 | optional: true | ||
| 3286 | 3286 | ||||
| 3287 | − '@napi-rs/canvas@0.1.100': | 3287 | + '@napi-rs/canvas@1.0.13': | ||
| 3288 | optionalDependencies: | 3288 | optionalDependencies: | ||
| 3289 | − '@napi-rs/canvas-android-arm64': 0.1.100 | 3289 | + '@napi-rs/canvas-android-arm64': 1.0.13 | ||
| 3290 | − '@napi-rs/canvas-darwin-arm64': 0.1.100 | 3290 | + '@napi-rs/canvas-darwin-arm64': 1.0.13 | ||
| 3291 | − '@napi-rs/canvas-darwin-x64': 0.1.100 | 3291 | + '@napi-rs/canvas-darwin-x64': 1.0.13 | ||
| 3292 | − '@napi-rs/canvas-linux-arm-gnueabihf': 0.1.100 | 3292 | + '@napi-rs/canvas-linux-arm-gnueabihf': 1.0.13 | ||
| 3293 | − '@napi-rs/canvas-linux-arm64-gnu': 0.1.100 | 3293 | + '@napi-rs/canvas-linux-arm64-gnu': 1.0.13 | ||
| 3294 | − '@napi-rs/canvas-linux-arm64-musl': 0.1.100 | 3294 | + '@napi-rs/canvas-linux-arm64-musl': 1.0.13 | ||
| 3295 | − '@napi-rs/canvas-linux-riscv64-gnu': 0.1.100 | 3295 | + '@napi-rs/canvas-linux-riscv64-gnu': 1.0.13 | ||
| 3296 | − '@napi-rs/canvas-linux-x64-gnu': 0.1.100 | 3296 | + '@napi-rs/canvas-linux-x64-gnu': 1.0.13 | ||
| 3297 | − '@napi-rs/canvas-linux-x64-musl': 0.1.100 | 3297 | + '@napi-rs/canvas-linux-x64-musl': 1.0.13 | ||
| 3298 | − '@napi-rs/canvas-win32-arm64-msvc': 0.1.100 | 3298 | + '@napi-rs/canvas-win32-arm64-msvc': 1.0.13 | ||
| 3299 | − '@napi-rs/canvas-win32-x64-msvc': 0.1.100 | 3299 | + '@napi-rs/canvas-win32-x64-msvc': 1.0.13 | ||
| 3300 | optional: true | 3300 | optional: true | ||
| 3301 | 3301 | ||||
| 3302 | '@next/env@16.4.3': {} | 3302 | '@next/env@16.4.3': {} | ||
@@ -4185,9 +4185,9 @@ snapshots: | |||||
| 4185 | pako: 1.0.11 | 4185 | pako: 1.0.11 | ||
| 4186 | tslib: 1.14.1 | 4186 | tslib: 1.14.1 | ||
| 4187 | 4187 | ||||
| 4188 | − pdfjs-dist@5.7.284: | 4188 | + pdfjs-dist@6.4.299: | ||
| 4189 | optionalDependencies: | 4189 | optionalDependencies: | ||
| 4190 | − '@napi-rs/canvas': 0.1.100 | 4190 | + '@napi-rs/canvas': 1.0.13 | ||
| 4191 | 4191 | ||||
| 4192 | pg-cloudflare@1.4.1: | 4192 | pg-cloudflare@1.4.1: | ||
| 4193 | optional: true | 4193 | optional: true | ||
modified
services/qa/package.json
+2 −2
@@ -23,7 +23,7 @@ | |||||
| 23 | "@autoscholar/storage": "workspace:*", | 23 | "@autoscholar/storage": "workspace:*", | ||
| 24 | "drizzle-orm": "^0.45.0", | 24 | "drizzle-orm": "^0.45.0", | ||
| 25 | "pdf-lib": "^1.17.1", | 25 | "pdf-lib": "^1.17.1", | ||
| 26 | − "pdfjs-dist": "^5.4.0", | 26 | + "pdfjs-dist": "^6.2.108", | ||
| 27 | "zod": "^4.1.0" | 27 | "zod": "^4.1.0" | ||
| 28 | } | 28 | } | ||
| 29 | −} | 29 | +} | ||
| \ No newline at end of file | |||||
modified
services/qa/src/pdf.ts
+1 −1
@@ -73,7 +73,7 @@ export async function inspectPdf(buf: Buffer): Promise<PdfInspection> { | |||||
| 73 | parts.push(content.items.map((it) => ("str" in it ? it.str : "")).join(" ")); | 73 | parts.push(content.items.map((it) => ("str" in it ? it.str : "")).join(" ")); | ||
| 74 | } | 74 | } | ||
| 75 | text = parts.join("\n"); | 75 | text = parts.join("\n"); | ||
| 76 | − await pdf.destroy(); | 76 | + await task.destroy(); | ||
| 77 | } catch (e) { | 77 | } catch (e) { | ||
| 78 | errors.push(`pdfjs text extraction failed: ${(e as Error).message}`); | 78 | errors.push(`pdfjs text extraction failed: ${(e as Error).message}`); | ||
| 79 | } | 79 | } | ||
| 80 | 80 | ||||