What's new

User-visible changes shipped to ghcr.io/neverbot/nottario:latest, newest first. Every push to master ships :latest; versioned tags are cut on demand.

2026-08-20

  • The frontend is now served compressed. Static assets and the app shell are gzipped once at startup and served precompressed to any browser that accepts them, cutting the transfer by about 70% (the architecture page's layout engine alone drops from 1.6 MB to 472 KB). Clients that do not advertise gzip still get uncompressed bytes, and Vary: Accept-Encoding keeps shared caches honest.

  • Pages reload without re-downloading the frontend. Static assets now carry an ETag, so a browser that already has them revalidates with an empty 304 instead of fetching everything again — around 3.2 MB per reload on a typical page. Freshness is unchanged: a rebuilt asset still arrives in full. The ?v= cache-busting query on the entry scripts is gone, since the ETag covers every file rather than just those two.

  • The documentation site is now agent-readable. A curated llms.txt index lives at the site root, and every page is also served as plain Markdown at the same URL with the extension swapped for .md (for example /getting-started.md), following the llms.txt proposal. make docs-check fails if a page is missing from the index, so the two cannot drift apart.

2026-08-03

  • Agent skill bundle now tells agents to list their own doing tasks and surface them before previewing new work when the human asks "what's next", so unfinished pickup from a previous session isn't silently skipped.

2026-07-07

  • Deleting a role no longer kicks its holders out of the project. Membership and role assignment are now separate tables; the members panel gains a "No roles yet" state and a dedicated "remove from project" action, so replacing the role catalogue is a safe editorial operation instead of a data-loss trap.

2026-07-05

  • Per-user notifications system. Every user now sees a bell in the topbar with an unread indicator, a drawer listing task events that concern them (someone assigned them a task, someone commented on a task they're assigned to or created, a task they're assigned to or created was closed), and a preferences block under /me to opt out per kind. Self-hosters can turn the whole system off with NOTIFICATIONS_ENABLED=false.
  • Self-hosted admins now see an "update available" banner when a newer commit lands on upstream master. The check runs in-process every 24 hours (configurable via SELF_UPDATE_CHECK_INTERVAL); disable with SELF_UPDATE_CHECK_ENABLED=false. See the update notifications reference.

2026-06-20

  • BREAKING — skill bundle install collapsed into one tool. nottario.skill.list and nottario.skill.read are gone. The new nottario.skill.install returns a small JSON descriptor with a short-lived signed URL for the bundle as a single zip, plus an install plan and a bundle_version hash. The bundle content no longer flows through the MCP response — the agent fetches the URL out of band with any HTTP tool, unzips into <workspace>/.claude/skills/nottario/ (or ~/.claude/skills/... as fallback), and restarts the client. A typical first sync drops from ~20-30k tokens to ~200.
  • New nottario.tasks.close MCP tool. Atomic close that bundles link_commit + add_comment + set_state into one transaction. On precondition failure the whole thing rolls back. Slim ack {task, comment_id?, linked_commit_count}; verbose: true for the full Task. Skill bundle now teaches tasks.close as the canonical close and explicitly forbids "starting work" / "claimed" pickup comments.
  • Arch and search MCP responses slimmed. arch.list_nodes / list_edges return slim rows; arch.get_node opts in to children/edges/links via include_*; upsert_* and move_node return slim acks. search drops the raw description (snippet only), default limit 50→20. All accept verbose: true.
  • docs.read { head_only: true }. Returns frontmatter + 400-char preview with truncated / body_length markers.
  • tasks.list defaults to open tasks only. Pass include_closed: true or an explicit state to see done/wont_do.

2026-06-19

  • MCP responses are slim by default. High-frequency task mutations return only the keys needed to chain the next call; no description or comment body echoed. tasks.get omits deps, commits and comments unless include_* is set. verbose: true opts back in. A typical "claim → comment → done" loop drops from ~5 KB to ~600 B. New "Token discipline" section in the skill bundle.
  • Edit task title, description and comments from the UI. Quiet Edit button reveals a GitHub-style Write/Preview markdown editor (Ctrl/Cmd+Enter, Esc). Members edit text; admins edit role. Per comment Edit/Delete for author or admin. Edited marker; optimistic concurrency rejects stale writes.

2026-06-15

  • Skill bundle: git methodology. New methodology/git.md covers solo / parallel-agent / multi-dev workflows.
  • Closing comment is now required before done / wont_do. Bugs get a terse Repro / Fix / Test triplet; documented in domains/tasks.md.

2026-06-14

  • Architecture diagram is now versioned. Edits open a per-author session; the idle window (default 120s) auto-flushes one arch_revisions row with the full graph snapshot. New MCP tool nottario.arch.checkpoint { message? } flushes immediately. New env vars NOTTARIO_ARCH_LOCK_IDLE_SECONDS and NOTTARIO_ARCH_TICK_SECONDS. Different-author writes during an active session return 423 Locked with retry_after_seconds. New REST endpoints /arch/history and /arch/revisions/{version}.

2026-06-12

  • Brand-anchored palette + Gantt visual refresh. Single CSS-token system rooted in the brand gradient (#1f6feb, #2da44e); docs at docs/design/palette.md. Gantt: NOW pill with glow column, past-zone wash, hairline lane separators, role-tinted bars, corner red dot for bugs, collapsed legend.

2026-06-10

  • Kanban: filter row, priority dots, column rename. Filter chips for Mine / Role / Type, mirrored to the URL hash. Priority shows as a coloured dot. Columns renamed to To do / In progress / Done. Drag across columns shows an Undo toast (6s). In-app delete confirm. feature type is gated behind Advanced.
  • Realtime: comment events propagate live. task.comment.* refreshes the open detail dialog without reload.
  • Search dropdown: keyboard nav, grouping, error state. Results grouped by source with headers. Top hit auto-selected; ↑/↓/Enter/ Esc work. Network failures surface a Retry row instead of a silent "No matches". / hint in the empty input. Meta lines drop the internal column prefixes.

v0.1.0 — 2026-06-08

First public release, published as ghcr.io/neverbot/nottario:0.1.0 (linux/amd64).

  • Tasks. Atomic claim (SELECT … FOR UPDATE SKIP LOCKED), dependency cycles caught with a project-scoped advisory lock, cascading rollup on feature parents. Cycles ("sprints") with rollover. Kanban and hand-rolled-SVG Gantt views.
  • Documents. Versioned markdown store with optimistic concurrency. Full history per path.
  • Architecture. Compound-layout diagram backed by ELK, rendered with our own SVG.
  • Identity. GitHub OAuth for humans; per-project API tokens for agents. Admin tokens are not exempt from project scope.
  • MCP server. Streamable HTTP, Bearer auth. Tools cover whoami / projects / tasks / docs / arch / cycles / search / skill.
  • Skill bundle. Operating rules read on demand via MCP or pre-installed in Claude Code.
  • Search. Full-text across tasks, documents and arch nodes, multi-language.
  • Realtime. SSE + Postgres LISTEN/NOTIFY. No WebSockets.
  • Backups. Optional in-process pg_dump, daily with N-day rotation. Off when NOTTARIO_BACKUP_DIR is unset.
  • Licence. MIT.

See Self-hosting reference and Getting started.