Skip to main content

Mill v1 release brief

Objective

Build a complete open-source, self-hosted task list for teams and external clients under avgeek-oss/mill. Repository publication is authorized after the current launch review. v1 is the first release candidate, with proposed tag v1.0.1. Implement and verify the current user-authorized scope below before publication. The current scope removes task checklists, comment editing, and the Agent concept completely. Tasks have optional human assignees; REST and MCP clients act through human-owned credentials. The existing 001_initial.sql baseline is preserved, and the key-policy change uses a forward migration. The release gate must use evidence from this exact revision; historical candidate receipts do not prove the current behavior. The October 5 task-type addition supports Task and Bug, with Task as the default for new and existing work. Type is available during UI creation, above Status on the task page, and through REST/MCP creation and updates. Colored type icons precede task IDs in the list. Type changes preserve identifiers and use the same permission, version, independent-save and activity rules as other task fields. Keep the single prelaunch baseline and preserve existing installations through guarded conversion.

September 29 scope decision

The October 5 start-date addition adds an optional calendar date before Due date on the task page. Start date saves independently and is available through REST/MCP creation and updates. Existing tasks receive a null start date; duplicating a task leaves both dates empty. Preserve the single prelaunch baseline and all existing data through the guarded conversion. The user reduced v1 to a list with fixed task statuses: Backlog, Todo, In Progress, In Review, Done, and Won’t Do. Boards are alphabetical. Kanban, custom statuses, manual board/task ordering, labels, task parents/subtasks, portable export/import, and email task notifications are excluded. Earlier September 29 decisions also exclude archive/trash/restore views, a separate Inbox page, and workspace-wide audit history. These are explicit product decisions, not verification shortcuts. Existing private pre-launch records must be preserved through the explicit conversion procedure, including task IDs, identifiers, descriptions, assignments, priorities, due dates, comments, activity and notifications. Keep the original schema as a recoverable archive. The initial baseline contains only the current supported model; older Kanban, Agent identity, member-grant and checklist structures are not part of the v1 schema. After publication, applied migration files are immutable and changes require forward migrations. Earlier Mill ideas included hosted agent teams, co-founder personas, knowledge bases, and Kanban. Those directions and their prior screenshots/test receipts are historical. Mill remains an Avgeek OSS sibling of Towbar, with a focused list for people and permissioned external clients. Ordinary task management needs no LLM key or hosted agent runtime.

Client access and interface revision

Mill has no Agent identities, management UI, assignments, filters, REST endpoints or MCP tools. Personal and team API keys require Name, Permissions and Expires after, with Read-only, Edit, or Administrative grants and 30 days, 90 days, 1 year, or Never expiry. Both REST and MCP enforce stored grants. Personal keys remain bounded by active owner membership and current role; team keys use team policy independently of their creator. MCP OAuth creates a human-owned connection with approved scopes and optional board restrictions. Active membership, current role and credential restrictions apply at authentication and again before writes commit. Activity identifies the person and whether the action came through OAuth; it does not introduce another identity. The current interface must satisfy each of the 14 interface requirements below: Towbar button, hamburger, page icon and Widget heading sizes; concise identifier copy; plain Board settings with a separate Delete board modal through the ellipsis after New task; stable loading titles; filters with accessible names and visible labels in the secondary panel; the primary Create Board button at the right of the Boards page heading; removal of Backups and Remote MCP widgets; Team Settings naming without the Workspace details Widget title; Last administrator guidance only in the delete tooltip; and personal/team API keys and human-owned MCP connections. These are discrete requirements, not a general polish claim. The applied 001_initial.sql remains checksummed; 002_key_policies.sql adds the key-policy model without discarding legacy records. Startup rejects retired ledgers without altering data. The separate pre-launch converter verifies source data, copies it into a fresh baseline, removes active Agent structures without discarding the archived source data, invalidates obsolete cached response bodies and retains a complete recoverable source schema. Fresh installation, conversion, backup/restore, source permissions, rendered desktop/phone and exact-commit CI evidence remain distinct release gates.

Complete product scope

  1. First-install setup, secure sign-in/sign-out, invitations and membership, Admin/Member/Viewer access, profile preferences, time zones, sessions, and recovery. Use passkeys as the only second factor, with distinct passkey recovery codes and operator account recovery. Do not implement authenticator-app setup or TOTP verification. No default credentials.
  2. Multiple boards in one workspace, alphabetical board navigation, stable prefixes, board settings, and Admin session or Administrative API-key permanent deletion, with confirmation in the UI. The primary sidebar has Operate → Boards, which opens the alphabetical card overview at /boards. Cards show Backlog, To Do and In Progress counts across every task, with Active limited to Todo, In Progress and In Review. The overview’s primary Create Board action at the right of the page heading creates boards. Individual board tables show search above the table and use the secondary sidebar for filters and sort, available through the Filters drawer on smaller screens. The ellipsis after New task opens plain Board settings or a separate Delete board confirmation.
  3. Complete task lifecycle on a dedicated page: view, independently edit and immediately save each task field, change a fixed status, assign a person, prioritize, set a due date, and permanently delete with confirmation. UI creation asks for Title, Description and Assignee, then opens the page; REST/MCP creation can still set other fields. Retain stable identifiers and deep links. Versions and transactions prevent silent lost updates; failed or conflicting edits retain their drafts and owning retry actions.
  4. Safe Markdown descriptions, with a plain textarea during editing and rendered content on the task page; post/delete-only comments, mentions, and attributed task activity. Creation has no description preview. Comment editing and file uploads are excluded. Preserve bounded content and safe links.
  5. A usable task list with search, combined status/assignee/priority filters, sorting, and stable bounded pagination. Search, filters, sort, page and page size live in URL parameters and survive reload, Back/Forward and task return links. Verify keyboard and touch controls, mobile navigation, long content, and empty/loading/error states.
  6. In-app notifications for assignments and mentions, profile preferences, meaningful unread state, and the compact header popover with a single bounded scrolling list. No All/Unread tabs or separate Inbox page. Task email notifications are excluded. Keep account and invitation delivery behavior truthful: the current provider is unavailable, invitations use private links, and operator recovery remains available.
  7. Personal and team API keys for REST and MCP with explicit grants, human-owned OAuth for remote MCP with scopes and optional board grants, revocable credentials, human attribution, idempotent mutations, current-role enforcement, rate limits, and bounded requests/responses. Retain HTTPS OAuth/PKCE and credential protections. Verify actual SDK tool calls against the running reduced model.
  8. Team Settings with General and Members pages at /team-settings/general and /team-settings/members, Account Settings with Profile, Preferences, Email & Password, Passkeys, Sessions, API Keys, MCP Connections and MCP Guide pages plus Team Settings → API Keys, health/readiness endpoints, understandable operational failures, shared empty/loading/error states, and dedicated 404/500 views. No unavailable navigation or fake production data.
  9. Self-hosting: production Docker Compose with PostgreSQL and separate API/UI images, runtime environment variables, a simple download/configure/start installation without Git or Node, one-time setup, checksummed migrations, persistent PostgreSQL, HTTPS/proxy guidance, upgrades, and full database backup with tested restore. A new user must not need private Avgeek access.
  10. OSS delivery: Apache-2.0 and attribution, README and community/maintainer guidance, issue/PR templates, dependency updates, pinned installs, complete CI, vulnerability audit, production image/release tooling, changelog, and accurate v1 notes. Keep repository and artifacts private until publication is authorized.
  11. Beginner documentation for installation, first board/task, team roles, everyday work, REST/MCP, configuration, operations, backups, upgrades, and troubleshooting. Current screenshots must show the reduced implementation; old screenshots and proof remain clearly historical.
Routine implementation choices and bounded parallel work are authorized. Record the actual interfaces and behavior. Raise material conflicts to the coordinator while continuing independent work. Do not remove a retained requirement merely to obtain a passing gate.

Towbar standards and review

Use the adjacent Towbar checkout read-only for current Apache-safe primitives, shell, authentication, scopes, migrations, tooling, packaging, and docs. Mill must stay self-contained with public dependencies. Carry forward restrained typography, stable icons/logo proportions, readable secondary text, shared controls, bounded scrolling selects, symmetric rows, and progress/recovery in the initiating modal. People actions sit above unheaded member/invitation tables. Use shared email/name Avatars with initials fallback, normal-weight primary and secondary table lines, semantic role/status Chips, secondary or danger actions, with inline/ghost styling reserved for the header breadcrumb navigation toggle, task-page Back to board, and extra-small explanatory form text except the task deletion confirmation. Preserve focus and keyboard behavior without exposing internal implementation details in normal product flows. Review actual desktop, tablet, and phone routes in both themes. Include long task/member content, many tasks/boards, scrolled selects, discussion controls, fixed status changes, permission denial, expired sessions, network failure, reload, and Back navigation. Maintain the current requirements/evidence matrix in the release pull request. Fresh evidence must cover clean baseline installation, guarded pre-launch conversion preserving existing data, backups/restores, roles/scopes, SDK calls, retry/deletion correctness, concurrent edits, and the real list UI. Previous Kanban/custom-status/export/import proofs and the preceding fixed-list candidate receipts do not establish this revision’s behavior. Record the 14 UI requests and current client authorization requirements separately; leave their status pending until fresh evidence exists. Readiness requires the complete current scope, production installation/container checks, CI on the reviewed commit, no material unresolved finding, and independent coordinator review. Documentation or an implementation report alone cannot establish completion.