shadow·typer← home
Release notes

Changelog

Every notable change to Shadow Typer — new features, realism tweaks, and the bugs we cared enough to write down. Newest first.

  1. v1.33.0

    fix2026-06-08

    Jobs finish on time again · more human rhythm (gradual formatting, fatigue, out-of-order sections)

    • Fixed jobs falling behind and missing deadlines: the human-rhythm features added recently (staggered starts, lighter weekends, writing around your active hours, varied daily effort) were quietly eating into writing time too early. They now kick in ONLY when a job has real slack — the moment a job is on-track-or-behind, it writes at full pace until it's safely ahead, so it always makes its deadline.
    • Formatting now appears gradually at the end (a few passes over a short window) instead of everything snapping into place in a single instant — like a real final formatting pass.
    • Typing warms up at the start of a session and tires toward the end (slightly slower, a few more typos) — but only when there's time to spare; a job under deadline pressure types steadily at full speed.
    • Multi-section jobs are written in a natural, non-sequential order (not always top-to-bottom), while still guaranteeing every section lands in the right place.
    • Fixed inserting into an existing doc: a line break at the start of what you want typed now correctly drops the text onto a NEW line below your anchor (it used to type on the same line), and the document preview now shows the real blank lines between sections.
    • A paused job now explains the real reason: jobs that stopped because they couldn't write to the doc reliably no longer show the misleading "couldn't converge to your original" message.
    • More resilient typing into existing docs: if one insertion point ever hits a write hiccup it now self-corrects (and, worst case, is isolated) instead of stalling the whole job — the other sections keep going.
  2. v1.32.0

    realism2026-06-07

    More human writing rhythm — staggered starts, your real hours, paste-style quotes

    • Staggered start times: each day the first writing session begins a little way into your window (varying day to day) instead of always at the same minute — so the timeline doesn't look clockwork.
    • Writes around when you're actually online: sessions now lean toward the hours you're really active (learned quietly from your visits), within your windows.
    • Varied daily rhythm: some days are one longer sitting, some are shorter check-ins, instead of an identical pattern every day.
    • Quotes, links, and citations are dropped in as a single quick paste (like Ctrl+V) rather than hand-typed character by character — exactly how people insert them.
    • A 'proofread before submitting' feel: a few earlier edits are saved for the final stretch before the deadline, like a last read-through.
    • New assignment-type quick profiles (essay, lab report, reflection, discussion post), and a one-click 'Reconnect document' on a job that lost access — re-pick the doc and it resumes in place.
    • All of the above backs off automatically when a deadline is close, so nothing here can make a job finish late.
  3. v1.31.0

    feature2026-06-03

    Self-healing jobs · clearer status · quick setup · snooze & more

    • Self-healing: a job that can't make progress (e.g. the doc was edited so its insert position no longer fits) now auto-pauses and flags itself for one-click repair instead of silently retrying forever — which also stops a broken job from hogging the worker and slowing your other jobs.
    • Every job page now shows a plain-English line explaining exactly what it's doing and — if it's not typing — why (outside your windows until X, quiet hours, snoozed, lost access, reconnect Google, behind schedule…). No more guessing.
    • New jobs check write-access to your doc up front, so a doc that was unshared/deleted/moved is caught at creation instead of failing silently hours later.
    • Quick setup: answer three questions (how polished, how long it should look, when you write) and everything's configured. Plus a formatting cheatsheet and a 'match my usual hours' button that builds windows from when you're actually active.
    • The new-job form now warns clearly when your settings won't finish by the deadline.
    • 💤 Snooze a job until tomorrow (auto-resumes), 🔔 get a browser notification when a job finishes, lighter writing on weekends (unless a deadline is close), and a mobile-friendly pass on the forms.
    • Fixed a false 'external edit detected' that could pause a job no one had touched — normal text-trimming from the revision pass no longer counts as the document shrinking.
  4. v1.30.0

    feature2026-06-03

    Links & alignment · reliability panel · draft autosave · deadline warnings

    • Real hyperlinks: a [label](url) you type (or the new 🔗 toolbar button) now lands as a clickable link in the finished doc — previously the markdown was left as literal text. Plus paragraph alignment (left/center/right via the new align button) and headings 1–6.
    • Why a continuous job can stop typing with work left: if Shadow Typer loses write access to the doc (it was unshared, deleted, or you switched Google accounts) the job is now paused with a clear 'Lost access to this doc' banner instead of silently retrying forever. And if your Google sign-in expired, every job page shows a 'Reconnect Google to resume' banner — the usual reason rush mode goes quiet.
    • Draft safety: the new-job text now auto-saves as you type, so a refresh or crash never loses a long paste — it's restored with a one-click 'Discard draft' if you don't want it.
    • Deadline warnings: a job projected to miss its deadline at the current pace now shows a 'Behind schedule' banner (and, if you've opted into job emails, a one-time heads-up) with how to catch up.
    • Reliability: an admin 'Needs attention' panel surfaces jobs that lost access, hit a conflict, drifted, or stalled at a glance, backed by a real worker heartbeat and a deeper health check.
    • Hardening: pasting from Docs/Word carries links and alignment across, markers inside a URL are never mangled, and a deep multi-agent verification pass fixed several edge cases (overlapping-edit failures, preview/doc mismatches, a worker-loop crash path, and a draft-resurfacing race).
  5. v1.29.0

    feature2026-06-02

    Richer formatting — highlights, text color, underline & strikethrough

    • Highlighter: select text and pick a color (yellow, green, pink, blue, or orange). It types as a marker and lands as a real Google Docs highlight when the job finishes.
    • Text color: color any selection red, orange, green, blue, purple, or gray.
    • Underline and strikethrough are now first-class — the buttons are in the toolbar (Ctrl+U for underline) and they actually apply in the finished doc (previously the preview showed underline/strike but the doc didn't get it).
    • The live Docs-style preview renders all of it — highlights, colors, underline, and strikethrough — exactly as it'll appear, so what you see is what you get.
    • Pasting from Google Docs or Word now carries highlights and text colors across too (mapped to the nearest available color), on top of headings, bold, italic, and lists.
    • Everyday text is safe: an equality like "a == b" is never mistaken for a highlight — markers only apply to a tight, non-spaced selection.
  6. v1.28.0

    fix2026-06-02

    Faster rush finish · clearer 'finishing up' status · third audit pass

    • Rush mode finishes fast. A fully-typed job no longer waits out minutes of artificial pauses while it converges to your exact text — the polishing pass now runs at full speed (those human-like delays only matter while text is actively being typed).
    • New 'finishing up · polishing the final draft' status. When everything's typed but the doc is still being converged to your original, the job shows this instead of misleadingly reading as 'writing' (which is what looked stuck before).
    • Editing a finished job's text now actually updates the document — including same-length rewrites — by converging the doc to the new text in place (previously a reword of a done job could silently no-op).
    • Conflict detection can no longer be raced: a job that's paused mid-tick for an external edit won't be typed into or marked done on that same tick.
    • Jobs that permanently lose doc access (the doc was unshared, deleted, or moved to another account) are now paused with a clear 'Lost access to this doc' banner — instead of silently retrying every few seconds forever. Fix the sharing and hit Resume.
    • 'Last seen' now reflects every visit, not just sign-ins — returning to the site while already logged in updates it (previously it was stuck at your original sign-in date).
    • Multi-block job creation is now atomic — a crash mid-create can't strand a job with no blocks.
    • Performance: cached the timezone formatters used in scheduling math (big CPU win on the job page / ETA), the convergence pass now reads the doc once instead of once per block, and the dashboard's block stats query is scoped to you.
    • Plus several smaller correctness and admin fixes from a third full audit.
  7. v1.27.0

    feature2026-05-29

    Backups & restore · duplicate jobs · bulk persona · weekly digest · CSV export

    • Restore a document to how it was BEFORE Shadow Typer wrote to it — Shadow Typer now snapshots the doc at job start, and a one-click 'Restore pre-write backup' on the job page brings it back (and pauses the job).
    • Self-heal: if a job ever can't fully converge to your exact original, the job page shows a 'Re-sync to original' button that re-runs the convergence pass.
    • Duplicate a job — clone its persona, windows, language, and text into a brand-new doc as a paused job you can review and start.
    • Apply one job's persona (typing speed, typo/deferred rates, crunch — optionally windows) to all your active jobs at once.
    • Weekly progress digest email (opt-in on the account page) — a short summary of how your active jobs are coming along.
    • Export a job's full activity history (sessions, typos, revisions) as CSV from the job page.
    • Admin: a dry-run view showing the planned rough-draft vs. your original and the full revision timeline (when each downgrade is scheduled to be upgraded).
    • Hardened in a second full-codebase verification pass: data export survives an undecryptable job, document restore is exact (and resets the job so resuming can't corrupt the restored doc), editing a finished job's text re-activates it, convergence is paragraph-precise (handles repeated lines and text containing $ characters), and assorted scheduling/validation/security fixes.
  8. v1.26.0

    fix2026-05-29

    Deep multi-agent audit — reliability & correctness hardening

    • Jobs that finish typing now always run the final convergence pass before completing — on every path (rush mode, in-session finish, multi-block) — so a doc is never marked done while still showing the rough draft. Fixed the case where a job stuck at 100% with a pending fix would never complete.
    • Stuck word-repetition fixes self-heal: a doubled word at the end of a paragraph (which couldn't be matched across the line break) is now corrected in place, and any genuinely unreachable fix is abandoned promptly so completion is never blocked.
    • Hesitation no longer changes your words. The 'reconsider mid-typing' effect now retypes the same word instead of swapping a synonym, so the finished text matches your original exactly.
    • Editing a job's text no longer risks being reverted by the convergence pass, and re-typing a repaired block now converges correctly.
    • Encryption safety: if stored text can't be decrypted (e.g. a key change), the job pauses with a clear error instead of ever typing raw data into your doc.
    • British/American spelling conversion is now safe — it no longer mangles words like raised, advised, prize, feeling, or spelling, and leaves words it isn't sure about untouched.
    • Quotes, URLs, and citations are never altered by typos or revisions (verified end to end).
    • Scheduling math is fully Eastern-Time aligned (per-day pacing, the multi-day stretch, idle days), overnight writing windows and sub-30-minute windows work, and the completion-time estimate is consistent.
    • Security & robustness: stricter cross-origin checks, rate limits on more endpoints, a confirmation guard on system-wide admin bulk edits, OAuth token-rotation handling, and assorted smaller correctness fixes.
  9. v1.25.0

    feature2026-05-29

    Français · deeper multilingual realism

    • French is now fully supported — interface translation plus a dedicated French typing engine: AZERTY fat-finger slips, the very common accent mistakes (é→e, è↔é, ç→c, circonflexe dropped), and classic homophone confusions (a/à, ou/où, ce/se, et/est, son/sont…) that get corrected on a later re-read.
    • The engine now detects the document's language automatically (English / French / Hebrew), so each word gets mistakes appropriate to the language it's actually written in — even when English and French share the same letters.
    • Hebrew realism deepened: added mater lectionis variation (ktiv male/haser — dropping or restoring an internal vav/yod), the single most common real Hebrew spelling inconsistency, alongside the existing final-form and homophone-letter confusions.
    • English realism deepened: a much larger table of real misspellings (government, accommodate, recommend, calendar…) and everyday homophones (hear/here, your/you're, role/roll, week/weak…).
    • Deferred fixes now anchor on surrounding context, so even a common mistyped word is corrected in exactly the right place and never left behind.
    • Fixed a table-cell typing bug: text written into a table cell across multiple sessions could come out with its sentences in reverse order (each session inserted at the cell start instead of after the previous text). Table cells now accumulate in the correct order. Affected jobs can be fixed in place with a new per-cell ↻ Repair button — no need to recreate the job.
  10. v1.24.0

    fix2026-05-28

    Deep correctness audit — scheduling, revisions, and editing hardened

    • Revisions can never rewrite the wrong text. Each upgrade is now applied only when its anchor appears exactly once in the live document — so a phrase that happens to repeat across blocks, or one you duplicated by hand, can't be corrupted. Multi-block jobs are safe.
    • Overnight writing windows now work. A window like 10pm–2am that crosses midnight used to silently never fire; it now runs correctly.
    • Schedule preview is honest about today. It no longer counts a window that has already passed (a 9–11am window shows as unavailable at 5pm), so 'fits / short by N' is accurate for same-day deadlines.
    • Available-time math is now exact to the minute (no more 15-minute rounding that could miss short windows), correct across daylight-saving changes, and faster.
    • Editing blocks is safe and reliable: changes save atomically (no half-applied edits), the toolbar always targets the right block after reordering, and invalid edits (empty blocks, deleting every block, blocks on a non-block job) are rejected with a clear message.
    • A finished job no longer gets dropped before its revisions finish converging, and conflict-detection no longer re-downloads the doc every minute during that phase.
    • A multi-block job whose anchors all went missing is no longer falsely reported as 'completed'.
    • Numerous smaller correctness and reliability fixes throughout the scheduler and worker.
  11. v1.23.0

    feature2026-05-28

    Draft-to-final revisions that actually converge · per-block editing · lumpy daily pacing

    • Planned revisions, rebuilt. Shadow Typer types a deliberately rougher first draft (weaker words, wordy phrasing, filler words, run-on sentences, the odd lowercase sentence start) and then, across your timeline, quietly upgrades it until it becomes your exact original text — like watching a real draft get polished day by day.
    • Fixed the big bug behind 'the revisions are bad': fixes used to fire on a random timeline %, often BEFORE that part of the doc had even been typed — so they found nothing and were abandoned, leaving the weaker text in place forever. Fixes are now scheduled from each passage's position in the document (so the text always exists first), retried instead of abandoned if a section isn't written yet, and a guaranteed final pass converges everything before the deadline.
    • Revision anchors are now collision-proof. Each upgrade is anchored to a span of text made unique with just enough surrounding context, and never overlaps another upgrade — so applying them in any order always lands on the right spot and can't corrupt text elsewhere. Verified across thousands of randomized runs.
    • Richer, more natural downgrades — a much larger vocabulary of weaker word and phrase choices, so the rough draft reads like a real rough draft.
    • Edit each block individually. On multi-block jobs (typing into specific places in a doc), 'Edit job' now lets you edit every block on its own — its anchor and the text it types — plus reorder, add, and remove blocks. Progress is preserved; each block resumes from where it left off.
    • Multi-day jobs no longer write the exact same amount every day. Output now varies naturally day to day (heavier days, lighter days) while still finishing on schedule — both in the projection and in what actually gets typed.
    • Schedule preview no longer counts a window that's already passed today — a 9-11am window correctly shows as unavailable at 5pm, so the 'fits in your schedule' / 'short by N' read-out is honest about same-day deadlines.
    • A fully-typed job now stays in rotation until every planned revision has converged into your original text (the worker used to drop a job the instant its text was written, which could leave the last few upgrades unapplied).
    • The demo video now streams from YouTube, so the landing page loads faster and deploys are much smaller.
  12. v1.22.0

    feature2026-05-28

    See the whole plan · clearer multi-day pacing

    • Multi-day pacing is now front and center. The new-job form and the job page both show a clear 'Spread across N days — finishes around [date]' banner with a mini per-day sparkline, so it's obvious Shadow Typer builds the doc up over time rather than finishing in one sitting.
    • Admin: full projected plan for any job. The admin job page now renders the entire day-by-day plan the scheduler intends to follow — projected characters per day, cumulative %, the estimated completion date, how many days before (or after) the deadline it lands, and markers for today, vacations, and the day it completes. Not just the windows it's allowed to work in, but the actual plan.
    • The projection honors everything the worker honors: writing windows, vacations, per-day intensity, crunch acceleration, and the multi-day stretch (min_days). It starts from now and accounts for what's already been written, so it stays accurate mid-job.
  13. v1.21.0

    fix2026-05-28

    Block-insertion fix · advanced Hebrew · more hardening

    • Fixed: 'write at end of document', 'write before', and table-cell blocks silently stopped working after the first session. The cursor was double-counting the write offset and shooting past the real insertion point. Only 'after text' anchors were unaffected. All anchor types now write correctly across multiple sessions.
    • Schedule preview now renders for multi-block jobs. It was gated on the single-textarea content, so multi-block jobs (where content lives in blocks) showed a blank preview. It now sums block content.
    • Advanced Hebrew typing realism. Hebrew jobs get a real Hebrew keyboard fat-finger map, final-form (sofit) confusion (מ/ם, נ/ן, כ/ך — the most common real Hebrew typo), and homophone-letter deferred confusions (alef/ayin, tav/tet, kaf/kuf) that get corrected on a later re-read — exactly like the English homophone behavior, in the right script.
    • Job-creation errors are sanitized. Failures now map to friendly messages ('couldn't access that doc', 'session expired', etc.) with an error reference ID instead of echoing raw internal error text.
    • Expired sessions are now swept hourly using the new index, so the sessions table doesn't grow unbounded.
    • Weekday labels in the scheduler localize to your language (Hebrew day abbreviations for Hebrew users).
  14. v1.20.0

    infra2026-05-27

    Deep hardening pass

    • Landing-page stats cached for 60s — public pageviews no longer scan the full jobs/events tables every request.
    • Event-history viewer capped at 500 events (was 2000) to prevent expensive renders on long jobs.
    • ETA calculation bounded to last 200 sessions instead of unlimited.
    • Token-refresh failures now log a category (rotation_or_revoked / client_deleted / unauthorized / other) to tell apart 7-day OAuth expiry from a Google-side incident.
    • Tightened block-action ownership join: blocks can only be mutated by their owning user, with a single explicit join.
    • Realism: slow personas (≤35 WPM) get an extra 150-600ms inter-word 'thinking' pause that scales with mood and fingerprint. Better matches how real slow typists actually pause between words.
  15. v1.19.0

    fix2026-05-27

    Hardening pass · multi-language · home polish

    • Decryption is now defensive. Malformed or key-rotated ciphertext returns the raw bytes instead of crashing the whole request — the worker keeps moving and an admin can investigate.
    • Worker session errors are now categorized (transient vs data) so on-call alerts can route correctly. Errors no longer fail silently for days.
    • Backup heartbeat. If no local backup has landed in 36 hours, an error log fires every hour so you notice before a restore is needed.
    • Job-count limit no longer counts completed jobs. You used to have to delete old finished jobs to make room for new ones; now they don't consume your 25-job slot.
    • Multi-block conflict detection excludes paused and anchor-lost blocks from the drift baseline, so partial-progress jobs don't false-flag.
    • Scheduler binary search has a hard iteration cap as a safety net against pathological window configs.
    • Realism: deep typo planner now bounds-checks before slicing past the word end — was a rare crash on short words.
    • Realism: scheduler nextWindowStart can now plan up to a full year ahead (was 120 days).
    • Multi-language scaffolding shipped. English + Hebrew with RTL layout. Pick a language via the picker in the landing nav. The typing engine detects Hebrew text and skips English-only realism touches (common-typo bigrams, homophone planting) so Hebrew jobs don't get random English garbage inserted.
    • Live Docs preview now shows real bullet markers (disc / circle / square at nesting levels, decimal for numbered lists). Was just indented without dots before.
    • Smart-default min_days now stays set when you manually adjust it. The auto-suggest no longer overwrites your override on the next keystroke.
    • Schedule preview honors min_days: a job set to stretch over 5 days now visibly spreads across 5 days in the bar chart instead of all landing on day 1.
    • Database: added expires_at index on sessions (faster cleanup), composite actor_id+ts on audit log (faster admin queries), kind+ts on events (faster category counts), status+deadline_at on jobs.
    • Crypto random for log event IDs now uses real entropy (crypto.randomBytes) instead of Math.random.
    • Home page refresh: multi-block section now highlights table-cell anchoring and the Docs-faithful preview. Realism cards updated with common-typo bigrams, burst fatigue, multi-day stretch.
  16. v1.18.0

    feature2026-05-27

    Type into empty table cells · live Docs preview while composing

    • Empty table cells are now targetable. New 'Table cell' anchor type — click the '+ type into this cell' button on any empty cell in the preview and that cell becomes the insertion point for the focused block. Cells get tinted to match the block they're assigned to, with a 'block N' chip in the corner.
    • Anchor highlights restored and improved. Every block's anchor is now highlighted in its block's color (emerald / sky / violet / amber / rose / cyan) right inside the Docs-style preview, with a 1px outline so it pops on busy pages.
    • Live Docs preview when composing a NEW doc. As you type into the textarea, a side panel renders exactly how your text will look in Google Docs once formatting is applied — headings, bold/italic, underline, strikethrough, links, ordered and unordered lists. No more guessing whether your markdown will land right.
  17. v1.17.0

    fix2026-05-27

    Tables in multi-block · Docs-faithful preview

    • Fixed: text inside tables was completely invisible to the multi-block editor and the worker. Anchors anywhere — inside a table cell, nested in tables-within-tables, anywhere — now resolve correctly. Same data, recursive walk.
    • Multi-block preview now renders like Google Docs: real headings (TITLE / SUBTITLE / H1-H6), real bold/italic/underline/strikethrough/links, real bulleted and numbered lists, real tables with cell borders. No more plaintext dump with fake bullet symbols.
    • Anchor highlights span across formatting boundaries — if your anchor straddles a bold word and an italic phrase, the highlight covers both seamlessly.
  18. v1.16.0

    feature2026-05-27

    Smarter defaults · what's new popup · deeper typing realism

    • Smart default day-spread: when you paste text and pick a deadline, the new-job form now auto-suggests a realistic min_days based on your text length (~1500 words/day max for long pieces, less for shorter ones). You can override at any time.
    • What's new popup — returning users see a brief summary of what shipped since they last visited, with a 'Got it' button that records the seen version so it doesn't show again.
    • Realism: common-typo bigrams. Words like 'the' / 'and' / 'receive' / 'definitely' now get their canonical mistypes ('teh', 'adn', 'recieve', 'definately') roughly 1 in 4 typos, instead of always-random adjacent-key slips. Feels much more human.
    • Realism: mid-word hesitation. Occasionally pause partway through a long word as if thinking about the spelling, then finish it.
    • Realism: capitalization slip. ~3% chance to start a sentence lowercase, then catch it a moment later and fix.
    • Realism: session energy drift. Long sessions slow ~3%/minute up to ~15% total, modeling fatigue smoothly instead of abruptly.
  19. v1.15.0

    feature2026-05-27

    Stretch jobs over days · email opt-in

    • New 'Stretch over multiple days' field on the new-job form. Even if your windows could finish the doc in one day, set min_days=5 and Shadow Typer paces itself across 5 days — same realism, but the doc evolves over a believable span instead of materializing in one sitting.
    • Worker honors min_days: paces against the longer of (real deadline, created_at + min_days). Also skips ticks when the job is ahead of its linear schedule, so a job set to 7 days won't sprint ahead even if a long window is available.
    • Email opt-in — job-completion and conflict emails are now OFF by default. Toggle them on under /account if you want them. Re-sign-in emails still always go out since those unblock paused work.
  20. v1.14.0

    polish2026-05-27

    Polish pass — clearer status + form UX

    • Rush mode badge now says "rush mode · writing now" or "rush mode · queued to write" instead of just "in window". The old label was misleading — users thought their schedule was firing when it was actually force-continuous.
    • Window time inputs now show an "ET" label so it's obvious all schedules use Eastern Time regardless of your browser locale.
    • Reset button on the new-job form — wipes all fields back to defaults if you want to start over.
    • Revision intensity slider now shows a live preview: "~6 revisions planned for 3,400 chars" so you see the effect before submitting.
    • Schedule preview shortfall warning now explains why: "need ~840/day, schedule gives ~520/day. Add a window, raise WPM, or extend the deadline."
    • Scheduler now plans up to 365 days ahead (was 120), so 6+ month writing projects forecast correctly.
    • Dropped revisions (non-unique anchors) are now logged so you can see why fewer revisions landed than expected on the activity feed.
    • Email reliability: notification sends now retry once on 5xx/rate-limit, and log clear errors when not configured.
    • Night owl preset fixed — the 8pm-1am window was encoded with endMinute=1500 which broke job creation. Now correctly splits into 8pm-midnight + midnight-1am the next day.
    • 24-hour forecast now caps at remaining work. Was showing absurd totals like '47k words coming up' for a job with only 3k chars left because the calculation ignored job size.
    • Conflict detection no longer auto-pauses jobs on the 'external growth' heuristic — too many false positives were stranding jobs near the deadline. Drift is now logged as a warning instead. Doc-shrank (a clearer signal of external deletion) still pauses.
    • Live status badge now shows the actual matching window, e.g. "in window (09:00-11:00 ET)" so you can verify why the badge says what it says.
  21. v1.13.0

    fix2026-05-26

    Audit-driven bug fixes

    • Conflict detection now works for multi-block jobs. We snapshot the doc length at job creation and compare it to the expected length on every check — external edits get caught instead of silently mangling the doc.
    • Per-block pause/resume on the job detail page. If one anchor's giving you trouble, pause just that block and let the rest keep typing. 'Try again' button on lost anchors so you can recover without recreating the job.
    • Dashboard job cards now flag '2/5 blocks lost' for jobs with broken anchors so you see issues without drilling into the detail page.
    • Realism: burst fatigue now scales on active typing time (every 60s of real keying adds fatigue), not raw burst count. A pause-heavy session stays fresher than a marathon focus session.
    • Realism: bigram timing now applies to the final-letter → punctuation transition, so words ending in tricky letter pairs feel different from smooth ones.
  22. v1.12.0

    feature2026-05-26

    Multi-block typing into existing docs

    • New 'Type into specific places in the doc' mode on existing-doc jobs. Define multiple insertion points; each one anchors to a unique phrase from your doc (or 'end of document'). Shadow Typer inserts directly at that location instead of always appending at the bottom.
    • Live document preview in the form — anchors are highlighted in your real doc text with color-coded numbered chips, so you can see exactly where each block will land.
    • Visual UX: select text in the preview and click 'Use current selection' to capture it as an anchor in one move. Re-order blocks with up/down arrows. Mismatched anchors flag a warning before submit.
    • Per-block progress on the job detail page: each block shows its own bar, status (waiting / writing / done / anchor lost), and the resolved anchor text.
    • Worker processes blocks sequentially by order; if a doc edit removes an anchor mid-job, the block is flagged 'anchor lost' and the worker moves on instead of getting stuck.
    • Backward-compatible: single-block jobs keep working exactly as before. The full realism engine (typos, deferred revisions, mood, crunch) applies inside each block independently.
    • All scheduling now uses Eastern Time. The scheduler interprets window hours in ET regardless of server clock, so windows fire when you actually picked them to.
    • Past-deadline jobs no longer go into 12x-baseline panic mode. The pacing logic now caps at the user's configured WPM once the deadline has slipped — jobs that fell behind due to the old timezone misfire keep writing calmly until done instead of typing frantically.
  23. v1.11.0

    feature2026-05-26

    Feedback widget, changelog, deeper realism

    • New 'Feedback' floating button on every signed-in page. Submit bugs, feature ideas, or general feedback — we read every one.
    • Public /changelog page (you're reading it) — backfilled history of every notable change since launch.
    • Realism: deeper night-time WPM trough (2-4 AM = ~0.45-0.6x base speed; 0-1 AM and 5 AM = ~0.55-0.75x). Casual personas no longer type at noon-speed at 3 AM.
    • Realism: burst fatigue — each successive burst within a session adds a longer cooldown and shortens the next active burst, modeling real writers stretching after 5+ focus stretches.
    • Job detail: 'Load more' on the recent activity list — see full session history on long jobs instead of just the last 30.
    • Default timezone changed to America/New_York (ET) as the worker fallback, so jobs with unset timezone respect ET sleep hours.
  24. v1.10.0

    feature2026-05-26

    Video demo on landing page

    • Added a 'See it in action' section under the hero with a real recorded demo of Shadow Typer writing a Google Doc.
    • Infrastructure: moved to a paid deployment tier so machines no longer get killed every 5 minutes.
  25. v1.9.0

    realism2026-05-25

    WPM ceiling fix + rush mode UI consistency

    • Fixed a long-standing bug where character delay was capped at 180ms, hard-limiting typing to 67 WPM regardless of persona. Cap is now 40-800ms so Casual (38 WPM) and Power user (75 WPM) actually run at their stated speeds.
    • Live status now respects rush mode: shows 'writing now' instead of 'next in 2 hours' when rush is enabled.
    • Added needs-reauth flag — when Google OAuth refresh fails, the worker skips the job and the dashboard shows a re-sign-in banner instead of silently failing.
  26. v1.8.0

    feature2026-05-23

    Formatting toolbar + markdown paste

    • B / I / H1-3 / bullet buttons above the text input. Selection-aware wrapping for inline marks; line-prefix logic for headings and lists.
    • Paste from Google Docs / Word / web pages now converts to markdown automatically — bold, italics, headings, links, and lists survive the round trip.
    • Markdown gets applied to the Doc on completion via a final formatting pass that converts **bold**, *italic*, # headings, and - bullets into real Docs styles.
  27. v1.6.0

    realism2026-05-19

    Planned revisions across days

    • First draft uses weaker word choices on purpose — 'show' instead of 'demonstrate', 'to' instead of 'in order to'. Later sessions quietly upgrade them.
    • Homophone swaps (their/there, principal/principle) get planted in early sessions and corrected days later, modeling 'I re-read what I wrote yesterday and caught a thing.'
    • ~80 word downgrades, ~30 phrase downgrades, full homophone set.
    • Crunch mode: past 60% of timeline, sessions stretch and break-rate drops. Past 95%, all pending revisions get pulled forward into one marathon polish session.
  28. v1.5.0

    feature2026-05-17

    Live ETA + 24h forecast

    • Job page now shows a projected completion timestamp that blends observed throughput with planned pace.
    • 24-hour writing forecast: estimated characters in each upcoming window, accounting for vacation days, day intensity, and crunch.
    • Activity heatmap with per-day session count.
  29. v1.4.0

    realism2026-05-15

    Per-user typing fingerprint

    • Every account gets a permanent randomized WPM jitter, typo bias, and pause pattern. Two users running the same essay produce noticeably different cadences.
    • Session 'mood' — flowing, neutral, thoughtful, sluggish — shifts naturally across sessions and shapes burst length, hesitation rate, and typo frequency.
    • Per-char delay now uses bigram-aware timing (common letter pairs type faster) and varies with mood.
  30. v1.3.0

    feature2026-05-13

    10 personas + vacation ranges + day intensity

    • Persona presets: Cramming student, Steady worker, Thoughtful essayist, Procrastinator, Night owl, Early bird, Weekend warrior, Lunch break, Power user, Casual.
    • Vacation date ranges — schedule respects 'I'm gone next weekend' without manually unchecking days.
    • Per-weekday intensity slider (0-100%) so you can say 'big push Thursdays, light Saturdays.'
    • Conflict detection: if the Doc shrinks below what we've written or grows unexpectedly, the job auto-pauses so you can review.
  31. v1.1.0

    infra2026-05-09

    Privacy/Terms pages + security hardening

    • Privacy Policy and Terms of Service pages with the Google API Services User Data Policy / Limited Use disclosure.
    • Robots.txt, sitemap.xml, PWA manifest, branded favicon, OG metadata.
    • AES-256-GCM encryption at rest for stored text.
    • Self-delete + JSON export endpoints so you can pull or wipe your data anytime.
  32. v1.0.0

    feature2026-05-07

    Public launch on shadowtyper.ca

    • Initial release. Bring-your-own Google account sign-in. Paste text + Google Docs URL + deadline. Worker writes the doc over time on a configurable schedule.
    • Realism engine: shallow typos that fix in seconds, burst-pause sessions (12-35s on / 8-35s off), time-of-day energy curve, hard late-night sleep (2-5 AM in your timezone), window-skip probability, 'I'm ahead of schedule' coast behavior.
    • Deferred error model — some typos get 'noticed and fixed' seconds later, others get corrected next session, the deepest sit until a final polish pass.