Skip to content

Releases: owengregson/Epo

Epo v3.1.1

Choose a tag to compare

@github-actions github-actions released this 28 Aug 18:57
Immutable release. Only release title and notes can be modified.

Epo v3.1.1

Install

Download for macOS (Apple silicon)    Download for macOS (Intel)    Download for Windows

Highlights

  • The growth chart draws in smoothly end to end: no more mid-animation
    pop, the projection appears only after the actual line finishes
    drawing, and the line and dot fade in instead of snapping.
  • The network graph animates only genuine newcomers — it no longer
    re-pops every node during scans.
  • Three dozen display fixes across every view: target funnel bars are
    readable, state chips carry their colors again, the queue list no
    longer flashes "Loading…", parked cards release their extra height,
    log lines trim with an ellipsis, and confirm dialogs block the whole
    window while open.
  • The settings save indicator renders as a proper chip instead of a
    collapsed sliver, and the release page itself is leaner — downloads
    first, no instruction wall.

Changes

Every commit since v3.1.0
  • release: v3.1.1 — smooth chart reveal, 35 display fixes, leaner release page (864f6ba)
  • fix(ui): full-app QC pass — 35 verified rendering, sizing, and animation defects (fa7894c)
  • fix(settings): save chip keeps its pill shape inside the zero-height header row (3a59547)

Notes

  • First launch: macOS — dismiss the dialog, then System Settings →
    Privacy & Security → Open Anyway
    (needed once). Windows — More
    info → Run anyway. A no-install build, Epo-3.1.1-portable.exe,
    is in the assets below.
  • Your database, settings, and Instagram session carry over — updating is a
    drop-in replacement. Installed apps update themselves from the
    latest*.yml / .blockmap assets below.
  • Epo acts on your Instagram account; use it at your own risk (see the
    README).

Full changelog: v3.1.0...v3.1.1

Epo v3.1.0

Choose a tag to compare

@github-actions github-actions released this 28 Aug 09:30
Immutable release. Only release title and notes can be modified.

Epo v3.1.0

macOS (Apple silicon · Intel) Windows 10 / 11 open source (MIT) local-first

Highlights

  • Background and overnight runs no longer freeze: every Instagram-facing
    operation now has a deadline, a watchdog revives a stalled tab (after
    sleep, a renderer crash, or a dropped automation session), and quitting
    never hangs behind a wedged loop.
  • Failures wait instead of killing the run: repeated failed actions take
    up to three long, jittered backoffs (roughly one to two hours each)
    before Epo concludes something is genuinely wrong; a soft-blocked
    action is parked, never hammered; and records burned during an
    incident are re-queued once it resolves.
  • Every quiet state explains itself: overnight rests, daily-cap parks,
    and recovery holds show a reason with a live countdown, settings saves
    confirm or surface their failure, and growth numbers stay honest —
    your chart no longer collapses to zero after the first scan.
  • The Chain tab is now Targets, useful from the first session: a live
    per-target funnel, an honest pool-and-coverage readout with a
    days-to-next-target runway, a follow-back conversion verdict that
    waits for real data — and the growth chart compares actuals to plan
    over 14-day to all-time windows.
  • Timing never lands on a clock grid: daily wakes, sweeps, backoffs, and
    scroll pacing all draw jittered intervals, and adaptive session pacing
    is now the default for new installs.

Changes

Every commit since v3.0.3
  • release: v3.1.0 — end-to-end QOL: freeze-proof engine, recovery ladder, honest surfaces (974be9f)
  • feat(ui): long-horizon growth surface — actuals vs plan, honest momentum (c8a705c)
  • feat(engine): requeue-healer — systemic failure windows give abandoned records back (4f5d2f0)
  • feat(ui): Chain tab rebuilt as the Targets console — useful from the first session (91160bf)
  • fix(engine): exhaustion needs positive evidence — and is reversible within 48h (e2235db)
  • feat(settings): adaptive-session pacing is reachable and the default; knobs stop lying (04dc181)
  • feat(timing): noisification layer — no IG-facing wait fires on a predictable instant (8165479)
  • feat(adapter): tab health events + sleep/resume observation feed the recovery path (a5c3651)
  • fix(rim): shape drift ends walks as a verdict — never a verified-complete empty census (c929ee1)
  • feat(engine): classified recovery ladder replaces terminal halts and blocked hammering (225506a)
  • fix(prune): census tiles tell one truth — durable last-complete census, honest bar (868ce98)
  • feat(engine): parks and holds are first-class visible states, not dashes (29cf4cd)
  • fix(ui): chain projection rides the mutation push — target stats tick during walks (7ce4039)
  • fix(store): first census no longer erases weeks of charted follower growth (1cc1a3e)
  • fix(settings): saves are visible and honest — chip, error toast, no silent revert (9281c3a)
  • fix(adapter): bound every tab-facing await; step watchdog recovers a wedged loop (26f9cde)
  • ci(repo-health): check our own raw URLs now that the repo is public (7d31de8)
  • fix(ci): silence actionlint's SC2016 info; one-click release downloads (78cedfc)

Install

Download for macOS (Apple silicon)    Download for macOS (Intel)    Download for Windows

One click downloads the right package. First launch: macOS blocks
un-notarized apps — dismiss the dialog, then System Settings → Privacy &
Security → Open Anyway
(needed once). Windows SmartScreen may warn —
More info → Run anyway. A no-install Windows build,
Epo-3.1.0-portable.exe, is in the assets below.

Already running Epo? Windows installs update themselves in the
background; macOS shows the new version in Settings → Updates and brings
you here.

Notes

  • Your database, settings, and Instagram session carry over — updating is a
    drop-in replacement.
  • Every other asset below (.zip, .blockmap, latest*.yml) is the
    self-updater's feed — apps update themselves from these files.
  • Epo acts on your Instagram account; use it at your own risk (see the
    README).

Full changelog: v3.0.3...v3.1.0

Epo v3.0.3

Choose a tag to compare

@github-actions github-actions released this 27 Aug 22:41
Immutable release. Only release title and notes can be modified.

Epo v3.0.3

macOS (Apple silicon · Intel) Windows 10 / 11 open source (MIT) local-first

Highlights

  • Card spacing is back to normal: the first Settings card and the prune
    census card sat flush against their neighbors after the intro-tour
    update.
  • The release pipeline is notarization-ready: the moment Apple Developer
    credentials are added as repository secrets, macOS builds sign and
    notarize automatically and first launch loses its warning dialog.

Changes

Every commit since v3.0.2
  • release: v3.0.3 — tour-anchor card spacing; notarization-ready signing (29691dd)

Install

Download for macOS (Apple silicon)    Download for macOS (Intel)    Download for Windows

macOS — download Epo-3.0.3-arm64.dmg (Apple silicon) or
Epo-3.0.3-x64.dmg (Intel), open it, and drag Epo to
Applications. The builds are not notarized yet, so macOS blocks the first
launch: open Epo once, dismiss the dialog, then System Settings →
Privacy & Security
Open Anyway (needed once).

Windows — download Epo-Setup-3.0.3.exe (recommended — it
updates itself from here on) or Epo-3.0.3-portable.exe.
SmartScreen may warn on first run: More infoRun anyway.

Already running Epo? Windows installs update themselves in the
background; macOS shows the new version in Settings → Updates and brings
you here.

Notes

  • Your database, settings, and Instagram session carry over — updating is a
    drop-in replacement.
  • The .zip, .blockmap, and latest*.yml assets below are the
    self-updater's feed; every file stays attached.
  • Epo acts on your Instagram account; use it at your own risk (see the
    README).

Full changelog: v3.0.2...v3.0.3

Epo v3.0.2

Choose a tag to compare

@github-actions github-actions released this 27 Aug 18:59
Immutable release. Only release title and notes can be modified.

Epo v3.0.2

macOS (Apple silicon · Intel) Windows 10 / 11 open source (MIT) local-first

Highlights

  • macOS builds now open the normal way. v3.0.0 and v3.0.1 hit Gatekeeper's
    "Epo is damaged" dead end on Apple silicon; the app is now properly
    ad-hoc signed, so first launch is just System Settings → Privacy &
    Security → Open Anyway.
  • Update checks stay quiet on builds that cannot self-update instead of
    showing an error in Settings → Updates.

Changes

Every commit since v3.0.1
  • release: v3.0.2 — ad-hoc sign macOS builds; quiet no-feed update checks (e3e8656)

Install

macOS — download Epo-3.0.2-arm64.dmg (Apple silicon) or
Epo-3.0.2-x64.dmg (Intel), open it, and drag Epo to
Applications. The builds are not notarized yet, so macOS blocks the first
launch: open Epo once, dismiss the dialog, then System Settings →
Privacy & Security
Open Anyway (needed once).

Windows — download Epo-Setup-3.0.2.exe (recommended — it
updates itself from here on) or Epo-3.0.2-portable.exe.
SmartScreen may warn on first run: More infoRun anyway.

Already running Epo? Windows installs update themselves in the
background; macOS shows the new version in Settings → Updates and brings
you here.

Notes

  • Your database, settings, and Instagram session carry over — updating is a
    drop-in replacement.
  • The .zip, .blockmap, and latest*.yml assets below are the
    self-updater's feed; every file stays attached.
  • Epo acts on your Instagram account; use it at your own risk (see the
    README).

Full changelog: v3.0.1...v3.0.2

Epo v3.0.1

Choose a tag to compare

@github-actions github-actions released this 27 Aug 18:52
Immutable release. Only release title and notes can be modified.

Epo v3.0.1

macOS (Apple silicon · Intel) Windows 10 / 11 open source (MIT) local-first

Highlights

  • Epo now updates itself: Windows installs download new versions in the
    background and apply them on restart; macOS shows new versions in
    Settings → Updates and brings you to the download page.
  • Intel Macs get native builds again — Epo-3.0.1-x64.dmg joins the
    Apple-silicon build (v3.0.0 shipped arm64 only).
  • Release notes, packages, and the update feed are now produced by one
    gated pipeline: nothing is published unless the full test, packaging,
    and boot checks pass first.

Changes

Every commit since v3.0.0
  • release: v3.0.1 (8c6e97f)

Install

macOS — download Epo-3.0.1-arm64.dmg (Apple silicon) or
Epo-3.0.1-x64.dmg (Intel), open it, and drag Epo to
Applications. These builds have a known packaging flaw: macOS reports the app "damaged". Rescue once from a terminal: xattr -cr /Applications/Epo.app — or skip to the newest release, which opens normally via System Settings → Privacy & Security → Open Anyway.

Windows — download Epo-Setup-3.0.1.exe (recommended — it
updates itself from here on) or Epo-3.0.1-portable.exe.
SmartScreen may warn on first run: More infoRun anyway.

Already running Epo? Windows installs update themselves in the
background; macOS shows the new version in Settings → Updates and brings
you here.

Notes

  • Your database, settings, and Instagram session carry over — updating is a
    drop-in replacement.
  • The .zip, .blockmap, and latest*.yml assets below are the
    self-updater's feed; every file stays attached.
  • Epo acts on your Instagram account; use it at your own risk (see the
    README).

Full changelog: v3.0.0...v3.0.1

Epo v3.0.0

Choose a tag to compare

@github-actions github-actions released this 27 Aug 18:45
Immutable release. Only release title and notes can be modified.

Epo v3.0.0

macOS (Apple silicon · Intel) Windows 10 / 11 open source (MIT) local-first

Highlights

This release rolls up the changes listed below.

Changes

Every commit since 0d3f680
  • fix(release): root-anchor the release/ ignore so the release cards commit (1c29bb3)
  • feat(release): auto-releaser, release cards, and the in-app self-updater (f884b76)
  • ci: SHA-pin every action; close the zizmor findings; fix Windows packaging (1478f99)
  • ci: security, health, hygiene, and rehearsal workflows; coverage in the gate (6e94f7c)
  • style(lint): organize imports repo-wide; the lint gate becomes biome ci (30eff88)
  • ci(dependabot): adopt the FableFactions auto-merge pattern (bdb857f)
  • docs(readme): brand README, full asset system, and nightly live panels (178d439)
  • feat(console): stage-hosted graph and prune pages, intro tour, durable window state (92a01ab)
  • feat(shell): claim the Epo app identity in dev runs; regenerate the icon set (716bb97)
  • chore(deps): bump the npm-minor-patch group with 3 updates (#11) (3e4eb70)
  • style(brand): crop the README hero wordmark to its content bounds (4425c14)
  • feat(prune): bio filter — protected words in a profile bio block the unfollow (af32167)
  • feat(timing): per-cycle volume plan fluctuates just under the daily caps (0283ab2)
  • chore(deps): bump @swc/core in the npm-minor-patch group (#10) (db1ed7f)
  • fix(prune): cap counts per active-hours cycle; scans stay fresh 4 days (447fa11)
  • fix(governors): actions counter resets at the active-hours cycle start, not midnight (5af8cc2)
  • fix(ui): focus management, layering, motion single-sourcing, live badges (1c74b12)
  • fix(main): teardown lock closes the rebuild races; identity re-validation (783c013)
  • fix(rim): feed shape drift is a typed failure, not an empty success (bd6c9f8)
  • fix(engine): step-level generation token, woven-feed accounting, policy constants (d02033f)
  • fix(timing): one home per constant — units module, live registry, mixture fallback (e6c0d73)
  • fix(brand): true dev Dock identity — transparent icon, 15% smaller mark, Epo name (dd2e8e1)
  • feat(brand): dark liquid-glass app icon (f9bc524)
  • feat(ui): settings-page revamp (collapsible cards, Behavior/Advanced); tooltip + card-entrance animation fixes (553a5ad)
  • feat(settings): qualitative pattern model (personas + knobs) deriving the pacing config; follow-plan daily volume (af43497)
  • feat(main): wire SessionPlanner + woven prune feed into the composition root; scan-and-enqueue scheduled prune (470ff85)
  • feat(collection): timing/interaction integration across store, rim, and adapter layers (8bda8f3)
  • feat(engine): session-driven organic pacing loop with woven prune feed; rolling-hour velocity signal (3ba0d53)
  • feat(timing): timing package + organic macro-timing model — distributions, circadian field, session planner, statistical harness (4e91075)
  • refactor: rename humanizer → interaction (neutral naming); retire request-budget/metering (c3fd12a)
  • docs: refresh plans/specs, add CLAUDE.md and the macro-timing-realism plan (0375465)
  • fix(prune): zero the stale candidate count when a fresh scan begins (7c31539)
  • feat(humanizer): real trusted input events with human motion profiles (839b1fa)
  • refactor(harness): dev harnesses use timing primitives + registry; timing unification complete (edca55f)
  • feat(renderer): real countdown deadlines, shared keep-alive hook, timer-leak and settings-desync fixes (a2e292e)
  • feat(adapter): cancellable waits — driver run token interrupts DOM polls and pacing (6bf4714)
  • refactor(main): probe + auto-prune watcher ride ScheduleManager; shared DelayManager wired (84a514c)
  • feat(engine): persist the follow-back sweep cadence across restarts (75f6ebb)
  • feat(ui): reset content scroll to top when switching views (a1af113)
  • refactor(prune): waits through DelayManager, delay formula composed from shared policies (5a86fec)
  • feat(ui): NumberTicker — slot-machine odometer digits for live counters (22b975a)
  • refactor(engine): waits through DelayManager — named keys, real nextActionAt deadline (fafdef8)
  • feat(prune): live mid-scrape counts — onProgress from page reader to throttled status emits (daff73f)
  • refactor(timing): rate-governor + page-reader delegate to shared delay policies (c6e1060)
  • feat(timing): ScheduleManager — overlap-guarded tick loops and persisted cadences (d519712)
  • docs: design for live scrape counts, number tickers, scroll reset, humanizer (2f94500)
  • feat(timing): DelayManager — named, cancellable, observable waits (04c16c0)
  • feat(timing): namespaced registry for all fixed operational timing constants (4e5f25f)
  • feat(timing): pure delay primitives — sleep, DelayPolicy, withTimeout (1f4172d)
  • docs: timing unification implementation plan (2d884fb)
  • docs: timing unification design — DelayManager, ScheduleManager, timing package (1217f88)
  • feat(prune): run unfollows at 1/3 of the humanized delay (34227ce)
  • ci: gate public-only security workflows on repo visibility (6ab27e3)
  • ci: pin scorecard-action to v2.4.4 + add Dependabot auto-merge (d27cef9)
  • build: adopt TypeScript 7 native toolchain — swc/jest + Biome (71c7ea9)
  • ci: run on Node 25 and bump all GitHub Actions to latest majors (ec446e8)
  • docs: v3 design spec, phase plans, UI mockup (55bba8d)
  • ci: GitHub Actions (CI, CodeQL, Scorecard, dependency-review, release), Dependabot, security policy, templates (b7f2d9e)
  • brand: Epo identity — metallic 'e' monogram, hero art, app icons, ground-up README (76b58ad)
  • harness: capture/inspect/livetest updates for the versioned adapter surface (5966b63)
  • renderer: Command Console redesign — Overview/Growth/Queue/Prune/Settings, Prune view (2-step scan→run, whitelist, schedule) (ee940a9)
  • main: composition root — IPC, prune tab hand-off (pause/resume growth), automation veil over scan+prune (09b9a95)
  • settings: single knob set + projections — prune config (whitelist, daily cap, scan pacing); shared IPC types (6bc503d)
  • engine: Phase 5 auto-prune — PruneEngine, 2-step scan→run, growth-managed exclusion, shared-graph census (e0d5ce9)
  • engine: paced growth loop — churn lifecycle, offline hold, pause-park handshake for the prune hand-off (6da1c48)
  • rim: paced ports — followers-page reader, relationship reconciler, own-following/followers scan sources (469eefa)
  • adapter: version-marked IG surface — reader/actor/sentinel, robust identity, FetchEnvelope, live-tab guard (30b68d1)
  • store: event-sourced knowledge graph — async reconciliation (leave-alone), prune ledger, scan-census enrichment (4ecd773)
  • build: modernize toolchain — TS6, ESLint 10 flat config, esbuild 0.28, electron-builder, epo CLI harness (3137bed)
  • docs: live gate PASSED — full pipeline validated live; first-run guidance (93cea88)
  • test(rim): fake actor scrollFollowers returns boolean (matches new best-effort signature) (8a06f80)
  • fix(adapter): scrollFollowers is best-effort — no container is not fatal (a350961)
  • fix(adapter): open followers modal by clicking the text-matched stat link, not a dead href (f083887)
  • Add DOM element inspection harness (npm run inspect) (b872e1c)
  • fix(adapter): open followers modal by navigating to /followers/ (Task-E-proven), not clicking a drift-prone link (e392020)
  • fix(identity): resolve own username via profile link/nav, not the failing current_user endpoint (1b3bab8)
  • docs: add live action smoke-test (npm run livetest) as the quick pre-gate check (b7bc1eb)
  • Wire livetest entry into esbuild + npm scripts (959e896)
  • Add live action smoke-test harness (src/livetest) (5cebfde)
  • docs: handoff — remediation complete, live gate ready (216 tests green) (6d555d6)
  • Complete v3 composition-root wiring (R1/R3/R5, f6/f11/f14/f15) (611e9fe)
  • f13: support overnight (wrapping) active-hours windows (17b4fc5)
  • engine: candidate enrichment + bounded refill cycle, generation-token loop, budget pre-check, per-step resilience (R1, R2, R4, f9, f10) (8a95de8)
  • scanner: mark scored-and-rejected candidates role='skipped' so the pool shrinks (R1.3) (50a0abe)
  • store: exclude role='skipped' from candidate pool; require explicit clock time for scrape cursors (R1.4, f8) (7efad34)
  • f11: own-followers sweep stores its parsed observations (d4423ec)
  • R4+f12: discriminated churn outcome; blocked-untouched and dry-run edge/ledger safety (1ec9185)
  • R1.1: add ProfileEnricher rim port for candidate count enrichment (d273f32)
  • docs: handoff — flag critical integration review + remediation-in-progress (hold live gate) (3a2f46a)
  • docs(remediation): Fable triage of assembled-system review — R1 enrichment + R2-R5 safety fixes (6dd3dca)
  • renderer: v3 instrument-panel dashboard (spec §1-§6) (658616c)
  • ipc: add read-only chain/queue/settings handlers (spec §5) (cf393de)
  • engine: support live config reload on settings change (71485d7)
  • docs: overnight build handoff — status, architecture, live-gate checklist (1ea4a7e)
  • Wire Wave 4: minimal engine Start/Pause/Stop controls + live status line (6e6e489)
  • Wire Wave 4: route engine controls + pushed status through IPC/preload (c26bc8e)
  • Wire Wave 4: Foundation composition root + lazy Engine graph (56046e4)
  • Wire Wave 4: extend IPC/status contract, drop dead adapter.reader slot (E2) (`d2f...
Read more