Skip to content

Pad v0.8.0

Choose a tag to compare

@github-actions github-actions released this 23 Jun 02:06
· 1960 commits to main since this release
616a6d2

Highlights

🕸️ The dependency graph

0.8.0's headline is a full interactive knowledge graph of your workspace. A new /graph route renders every item as a node with typed edges (blocks/blocked-by, parent/child) — as both a 3D force graph and a 2D directional renderer. It's live: SSE pushes glow/pulse animations onto nodes as work happens. And it's explorable — fly-to focus with neighborhood highlighting, blocker-chain tracing lit as a path, search with collection/status/role filters, and a per-item detail drawer you can deep-link via ?graph=1. Item headers gain a Graph button that opens the drawer in place.

🚀 Launchpad onboarding, natural-language-first

Brand-new workspaces now open into a launchpad with a setup-progress checklist and an active "want me to set it up?" offer. Onboarding is natural-language-canonical end to end — skill, MCP catalog, seeded playbook bodies, web copy, and the editor/library all lead with NL invocation. Workspace intent is captured at creation to warm the onboard run, the first agent-created item gets an aha-highlight, and there's a manual escape hatch for users who skip the guided flow.

📦 Portable playbooks & conventions

Move playbooks and conventions between workspaces as Markdown + frontmatter artifacts. Full surface coverage: pad item export / pad item import CLI, pad_item MCP export/import actions, server endpoints, and a web UI for both.

♻️ Archived-item recovery

Archived items are no longer masked as "missing." They surface in-place with an archived banner, and you can restore them from the item detail page, the CLI, and MCP.

🔐 Self-host auth hardening

Localhost password recovery for locked-out self-host admins (pad auth reset-password + the loopback /auth/local-reset endpoint), server version surfaced on /auth/session, a unified single-browser-handoff first-run setup, Apple as a cloud OAuth provider, and sliding session renewal.

Thanks

Special thanks to @b4rk13 for their first contribution to Pad — fixing SQLite account-token storage (#732). 🙏

Install

# Homebrew (macOS / Linux)
brew install perpetualsoftware/tap/pad

# Docker
docker pull ghcr.io/perpetualsoftware/pad:0.8.0

Or download a signed archive from the assets below.

Verifying

cosign verify-blob \
  --certificate-identity-regexp "^https://github.com/PerpetualSoftware/pad/.github/workflows/release.yml@.*" \
  --certificate-oidc-issuer "https://token.actions.githubusercontent.com" \
  --certificate checksums.txt.pem \
  --signature  checksums.txt.sig \
  checksums.txt

Changelog

Features

  • bf40cc9: feat(artifact): MCP pad_item export/import actions (#758) (@xarmian)
  • 7ea552f: feat(artifact): MD+frontmatter export/import core for playbooks & conventions (#754) (@xarmian)
  • 285a58e: feat(artifact): pad item export/import CLI commands (#756) (@xarmian)
  • 4f0984b: feat(artifact): server export + import endpoints for playbooks & conventions (#755) (@xarmian)
  • 02106a1: feat(artifact): web UI for playbook/convention export & import (#757) (@xarmian)
  • 10a55d1: feat(auth): accept provider=apple in cloud oauth-login/link/unlink (TASK-1773) (#714) (@xarmian)
  • 616a6d2: feat(auth): localhost password recovery for locked-out self-host admins (#760) (@xarmian)
  • 14614c9: feat(auth): surface server version on /auth/session (TASK-1839) (#740) (@xarmian)
  • 248f7c5: feat(items): expose item restore via CLI + MCP (TASK-1828) (#734) (@xarmian)
  • 09335c4: feat(onboard): active "want me to set it up?" offer on needs_onboarding (TASK-1850) (#742) (@xarmian)
  • fa8064e: feat(onboard): capture workspace intent at creation, warm the onboard run (TASK-1855) (#746) (@xarmian)
  • 7962fab: feat(onboard): make natural language the canonical onboard trigger (TASK-1849) (#741) (@xarmian)
  • a2827ec: feat(playbooks): NL-canonical invocation in seeded bodies + CLAUDE.md (TASK-1861) (#751) (@xarmian)
  • 3c3016a: feat(server): focused neighborhood mode on workspace graph endpoint (TASK-1781) (#718) (@xarmian)
  • 9322084: feat(server): workspace graph endpoint — nodes + typed edges (TASK-1731) (#699) (@xarmian)
  • 7ec19b5: feat(skill): NL-canonical playbook invocation in SKILL.md + MCP catalog (TASK-1859) (#749) (@xarmian)
  • db3917f: feat(web): /graph route MVP — lazy-loaded 3D force graph (TASK-1733) (#701) (@xarmian)
  • 771d102: feat(web): 2D directional dependency-graph renderer (TASK-1783) (#720) (@xarmian)
  • 1d62035: feat(web): NL-canonical onboarding banner copy (TASK-1851) (#743) (@xarmian)
  • e056e9c: feat(web): NL-canonical playbook invocation in the editor + library (TASK-1860) (#750) (@xarmian)
  • 80a939f: feat(web): aha-highlight the first agent-created item (TASK-1853) (#745) (@xarmian)
  • 372d95c: feat(web): archived-item recovery on the item detail page (TASK-1829) (#735) (@xarmian)
  • 2904802: feat(web): blocker-chain tracing as lit path + edge styling by type (TASK-1737) (#705) (@xarmian)
  • a37fa16: feat(web): deep-link the dependency-graph drawer via ?graph=1 (TASK-1786) (#723) (@xarmian)
  • 1bd3e52: feat(web): graph SSE live layer — glow/pulse on touched nodes (TASK-1736) (#704) (@xarmian)
  • a20095e: feat(web): graph TS types + API client method (TASK-1732) (#700) (@xarmian)
  • 1c3db43: feat(web): graph focus interaction — fly-to, neighborhood highlight, detail card (TASK-1734) (#702) (@xarmian)
  • 30bdbeb: feat(web): graph layout tuning — gravity wells + terminal recede (TASK-1738) (#706) (@xarmian)
  • 0234239: feat(web): graph node labels — always-on for hubs, distance-faded elsewhere (TASK-1743) (#708) (@xarmian)
  • 77dcd07: feat(web): graph search fly-to + collection/status/role filters (TASK-1735) (#703) (@xarmian)
  • bd16b9b: feat(web): graph view enhancements — larger drawer, node detail panel, toggleable legend, bigger cards (TASK-1787) (#724) (@xarmian)
  • f45a45a: feat(web): graph.getFocused client + truncated field for focus mode (TASK-1782) (#719) (@xarmian)
  • 4bd048c: feat(web): item-header Graph button + dependency-graph drawer (TASK-1784) (#721) (@xarmian)
  • ac43e49: feat(web): launchpad render-mode for unset-up workspaces (TASK-1852) (#744) (@xarmian)
  • 4456030: feat(web): live SSE updates in the dependency-graph drawer (TASK-1785) (#722) (@xarmian)
  • 4a99f5f: feat(web): manual escape hatch on the skipped-onboarding board (TASK-1856) (#747) (@xarmian)
  • 408e578: feat(web): setup-progress checklist on the launchpad (TASK-1857) (#748) (@xarmian)
  • 8c8e858: feat(web): show archived banner in-place on live archive (TASK-1833) (#736) (@xarmian)
  • dc8cb78: feat(web): surface Apple as a linked provider in console settings (TASK-1777) (#715) (@xarmian)
  • c93f2aa: feat(web): unified mobile top bar with always-on workspace switcher (IDEA-1835) (#737) (@xarmian)

Bug fixes

  • 341cbd3: fix(artifact): normalize import field map so json fields validate (BUG-1883) (#759) (@xarmian)
  • 22d901c: fix(auth): unify first-run setup into one browser handoff (BUG-1843) (#739) (@xarmian)
  • ba734d5: fix(editor): symmetric table cut/paste — structural row cut, TSV cell reconstruction (BUG-1247) (#712) (@xarmian)
  • 99b4649: fix(items): surface archived items instead of masking them as missing (BUG-1791) (#733) (@xarmian)
  • 33e4943: fix(server): non-fatal UA session binding + sliding session renewal (#727) (@xarmian)
  • 03d7347: fix(store): allow NULL api_tokens.workspace_id on SQLite for account tokens (#732) (@b4rk13)
  • b4e9e20: fix(web): collapse WorkspaceSheet switcher list when the sheet closes (IDEA-1720) (#711) (@xarmian)
  • 35cc26d: fix(web): collection cards show real child-item progress; child-progress endpoint (BUG-1509) (#710) (@xarmian)
  • eb5b2bf: fix(web): comment wikilinks resolve refs + carry username prefix (BUG-1744) (#709) (@xarmian)
  • 45d032c: fix(web): graph node click/dbl-click + Open as real link (TASK-1788) (#725) (@xarmian)
  • 38f18ac: fix(web): graph repaints in place instead of full-scene refresh (BUG-1742) (#707) (@xarmian)
  • 62fafc4: fix(web): kanban board height accounts for workspace top bar (BUG-1844) (#738) (@xarmian)
  • 00d4fe0: fix(web): quick-capture docks above bottom nav, mutually exclusive with other sheets (BUG-1765) (#713) (@xarmian)

Other changes

  • db14721: test(collections): drift-guard for NL-canonical playbook invocation (TASK-1862) (#752) (@xarmian)
  • 2991194: test(e2e): blog screenshot capture for BLOG-1704 (pad v0.7) (#696) (@xarmian)