25 Development Roadmap
david edited this page 2026-06-19 09:07:30 -07:00

Development Roadmap

Forgejo milestones track the main project phases. Repo docs remain the detailed source of design decisions.

Milestones

  • M0 Planning and Safety Foundation
  • M1 Scanner and Dry-Run Inventory: closed
  • M2 Metadata Model and Resolver: closed
  • M3 Organization and Downstream Profiles: closed
  • M4 Acquisition Integrations: closed for the lab milestone
  • M5 Web App Scaffold and Operator UI: authenticated Readarr-style lab console present
  • M6 Deployment and Operations: Docker healthcheck and tag policy present
  • M7 Documentation and Wiki Completeness: #13 open

Current Issues

  • #1 Implement read-only fixture scanner foundation: closed
  • #2 Define versioned Docker release packaging: closed by v0.2.8
  • #3 Explore final project name and logo direction
  • #4 Design scale-aware scanner persistence and database strategy: closed
  • #5 Design metadata source lookup and enrichment workflow: closed
  • #6 Design organization dry-run plans and downstream profiles: closed
  • #7 Add local prototype operator UI: closed
  • #8 Add acquisition foundation: closed
  • #9 Implement first real download client adapter: closed
  • #10 Add Proxmox LXC prototype installer: closed
  • #11 Back Add New and Activity with durable APIs: closed by v0.2.x
  • #12 Add real indexer and search configuration: closed by v0.2.7
  • #13 Publish lab docs and wiki refresh: ongoing with each release

Naming

  • Product name: Pagemaster
  • Tagline: "Look to the books"
  • Name/logo issue: #3

v0.1.0 Lab Release Slice

The v0.1.0 lab slice packages the first operable Pagemaster shell:

  • React/Vite operator console embedded in the Go server.
  • First-visitor setup for the initial operator account.
  • Role foundation for operator/requester/viewer accounts.
  • Server-side password hashing and setup/status APIs.
  • App configuration summary endpoint.
  • SQLite schema additions for users, sessions, settings, secrets, output profiles, automation profiles, and per-root apply behavior.
  • Docker packaging as pagemaster:0.1.0.
  • Calibre included in the image for self-contained ebook conversion tooling.
  • Docker smoke verification for /api/health, /api/setup/status, and the frontend shell.

Follow-up before a broader real-library lab run:

  • Enforce sessions beyond initial setup.
  • Build in-app configuration pages for roots, output profiles, secrets, and automation policy.
  • Add real acquisition configuration for Prowlarr/Newznab/Torznab and download clients.
  • Research and document MyAnonamouse setup accurately before implementing source-specific behavior.

v0.2.8 Docker Healthcheck

The current LXC/mainline prototype reports v0.2.8. It keeps the v0.2.7 acquisition milestone and adds Docker package hardening: the image has a built-in pagemaster healthcheck command, the Dockerfile declares HEALTHCHECK, and the Docker docs define immutable version tags plus reserved moving-tag policy for lab and latest.

Next slices should focus on provider identifiers in matching/ranking, controlled auto-grab and auto-import policy gates, MyAnonamouse/provider-specific behavior after verified setup research, downstream Audiobookshelf/Grimmory apply triggers, and upgrade/operator documentation.

M2 Result

The backend/scanner direction has moved from JavaScript to Go. The current repo keeps the scanner as a Go package under internal/scanner, shared synthetic stress helpers under internal/scannertest, SQLite persistence under internal/store, metadata resolver contracts under internal/metadata, and CLIs under cmd/.

M2 now includes:

  • db/schema.sql: scale-aware schema with source roots, scan runs, files, candidates, evidence, duplicate signals, import plans, and acquisition/domain tables.
  • internal/store: SQLite schema application, scanner-report persistence, source-root-scoped candidates, re-scan state, import-plan history, and indexed review counters.
  • internal/metadata: backend provider contract for wanted-author lookup and missing-item enrichment.
  • make check-large-scan: synthetic 30,000-file scanner stress check outside the repo.
  • make check-persistence: synthetic 30,000-file SQLite write validation outside the repo.
  • Go tests for scanner behavior, schema contract checks, scanner-report persistence, missing/moved file re-scans, repeated import-history growth, indexed review counters, and metadata resolver behavior.

Latest synthetic scanner check processed 30,000 files in 404 ms and produced 30,000 candidates, 30,000 evidence records, and 30,000 dry-run import plan actions.

Latest SQLite persistence check scanned 30,000 files in 409 ms and persisted the report in 3209 ms, producing 30,000 scan files, 30,000 candidates, 30,000 candidate-file links, 30,000 metadata evidence rows, one import plan, and 30,000 import plan actions.

SQLite is accepted for the first app scaffold, with the option to revisit after real-library testing.

M3 Progress

The first organization checkpoint is present:

  • internal/organization: Audiobookshelf dry-run planner.
  • organization_plans and organization_plan_actions: persisted dry-run organization plans.
  • make check-organization: fixture organization plan smoke command.
  • Tests for non-destructive copy-shaped operations, narrator folders, disc folders, duplicate review, weak metadata review, and persistence.

Current dry-run behavior:

  • Organize ready candidates.
  • Review duplicates and weak metadata.
  • Hold partial downloads, unsupported files, and sidecar-only candidates.
  • Preserve audiobook disc folders as Disc N.
  • Keep file operations non-destructive until review/apply behavior is explicitly designed.

The M3 foundation now includes downstream dry-run profiles plus copy-only approve/apply/audit behavior. Follow-up work should refine individual action review UI, retry UI, collision resolution choices, audit retention controls, and optional Audiobookshelf scan handoff.

Prototype Result

The first testable operator prototype is present:

  • cmd/library-manager serve: local web server.
  • internal/app: Go-hosted dashboard and JSON API.
  • /api/health: health check.
  • /api/dashboard: persisted scanner/review/organization summary.
  • Configured-root scan APIs persist reports, build organization plans, and return updated dashboard state.
  • make prototype: starts the prototype on http://127.0.0.1:8090.

The prototype uses SQLite under DATA_DIR and applies the schema idempotently on startup, so it can be restarted against the same development database.

Documentation Practice

Each implementation slice should update:

  • Repo planning docs under docs/.
  • The Forgejo milestone or issue state.
  • Wiki pages that explain setup, configuration, usage, or operator-visible behavior.