Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 35 additions & 5 deletions requirements/functional.rst
Original file line number Diff line number Diff line change
Expand Up @@ -433,7 +433,7 @@ Authentication implementation tasks

.. fr:: Metadata fetching
:id: FR-2_13
:status: open
:status: implemented
:priority: P1
:links: UC-2_3

Expand All @@ -446,9 +446,15 @@ Authentication implementation tasks
- User reviews and confirms changes before applying
- Cover images can be fetched automatically

**Implementation evidence (2026-10-25):** Metadata fetching is implemented through selectable Open Library and
Google Books searches, a reviewable book-edit draft, and fetched cover URLs.
Source review and focused provider/persistence tests passed on 2026-10-25.
See `the criterion-by-criterion closure record
<https://github.com/PapyrusReader/docs/issues/15>`_.

.. fr:: Physical book tracking
:id: FR-2_14
:status: open
:status: implemented
:priority: P1
:links: UC-2_9

Expand All @@ -461,6 +467,12 @@ Authentication implementation tasks
- Reading status and progress tracking
- Location field (e.g., "Shelf 3", "Lent to John")

**Implementation evidence (2026-10-25):** Physical books use the persisted library model alongside digital books.
Manual metadata, location/lending fields, reading status, and page progress
are implemented. Model, library, and editing tests passed on 2026-10-25.
See `the criterion-by-criterion closure record
<https://github.com/PapyrusReader/docs/issues/16>`_.

----

3. Integrated viewer
Expand Down Expand Up @@ -707,7 +719,7 @@ Authentication implementation tasks

.. fr:: Automatic goal progress
:id: FR-6_3
:status: open
:status: implemented
:priority: P1
:links: UC-6_2

Expand All @@ -720,6 +732,12 @@ Authentication implementation tasks
- Pages read updates page-count goals
- Progress is calculated in real-time

**Implementation evidence (2026-10-25):** Reader activity feeds live goal projections for completed books, reading
time, and page coverage. Reading-activity and goal tests passed on
2026-10-25.
See `the criterion-by-criterion closure record
<https://github.com/PapyrusReader/docs/issues/39>`_.

.. fr:: Goal notifications
:id: FR-6_4
:status: open
Expand Down Expand Up @@ -762,7 +780,7 @@ Authentication implementation tasks

.. fr:: Metadata server configuration
:id: FR-7_1_1
:status: open
:status: implemented
:priority: P0
:links: UC-7_1

Expand All @@ -777,6 +795,12 @@ Authentication implementation tasks
- Clear indication when offline or disconnected
- Works without metadata server (local-only mode)

**Implementation evidence (2026-10-25):** Official and custom server profiles support URL validation, discovery,
authentication, connection-state presentation, and guest/local-only use.
Server-profile provider and settings-page tests passed on 2026-10-25.
See `the criterion-by-criterion closure record
<https://github.com/PapyrusReader/docs/issues/42>`_.

.. fr:: File upload
:id: FR-7_2
:status: open
Expand Down Expand Up @@ -824,7 +848,7 @@ Authentication implementation tasks

.. fr:: OPDS catalog support
:id: FR-7_5
:status: open
:status: implemented
:priority: P2
:links: UC-7_4

Expand All @@ -837,3 +861,9 @@ Authentication implementation tasks
- Search within catalogs
- Download books directly to library
- Authentication for protected catalogs

**Implementation evidence (2026-10-25):** OPDS catalog management, navigation, search, acquisition, and protected
catalog credentials are implemented. The fixture-backed OPDS suite passed
on 2026-10-25. The ten opt-in network smoke cases were not run.
See `the criterion-by-criterion closure record
<https://github.com/PapyrusReader/docs/issues/46>`_.
44 changes: 38 additions & 6 deletions requirements/non-functional.rst
Original file line number Diff line number Diff line change
Expand Up @@ -596,7 +596,7 @@ missing. See :doc:`index` for status definitions.

.. nfr:: Logging and monitoring
:id: NFR-9_2
:status: open
:status: partial
:priority: P1

The system shall provide comprehensive logging and monitoring capabilities.
Expand All @@ -609,9 +609,13 @@ missing. See :doc:`index` for status definitions.
- Log rotation and retention policies
- Error tracking integration (optional)

**Remaining scope:** Production monitoring tasks below are implemented, but
structured logging and configurable levels across every application component
have not been established. This parent requirement remains open.

.. task:: Deploy self-hosted production observability
:id: TASK-OBS-01
:status: open
:status: implemented
:priority: P1
:component: observability
:readiness: ready
Expand All @@ -632,9 +636,16 @@ missing. See :doc:`index` for status definitions.
- Restart, redaction, notification, and rollback behavior are verified
- Whole-host outage detection and telemetry backups are explicitly deferred

**Implementation evidence:** The remaining production observation gate passed on 2026-10-25. All
eight acceptance checks passed, including full-window sample coverage.
Earlier deployment, browser, notification, restart, redaction, and rollback
evidence remains attached to the task.
See `the completion record
<https://github.com/PapyrusReader/observability/issues/1>`_.

.. task:: Expose private PowerSync monitoring metrics
:id: TASK-OBS-02
:status: open
:status: implemented
:priority: P1
:component: server
:readiness: ready
Expand All @@ -649,9 +660,14 @@ missing. See :doc:`index` for status definitions.
- The collector can scrape port 9090 on the private Docker network
- Existing public API and synchronization behavior remain available

**Implementation evidence:** Private PowerSync metrics are deployed, with implementation and
production acceptance recorded on the completed task.
See `the completion record
<https://github.com/PapyrusReader/server/issues/23>`_.

.. task:: Integrate the observability repository into the workspace
:id: TASK-OBS-03
:status: open
:status: implemented
:priority: P1
:component: papyrus
:readiness: ready
Expand All @@ -668,9 +684,15 @@ missing. See :doc:`index` for status definitions.
- Only the edge project publishes ports and databases remain private
- Existing component changes and deployment data are preserved

**Implementation evidence:** Workspace integration is merged in papyrus#33. The four-project
deployment boundary and workspace tooling checks passed again on 2026-10-25.
The prerequisite production observation gate has also passed.
See `the completion record
<https://github.com/PapyrusReader/papyrus/issues/32>`_.

.. task:: Restrict monitoring access to WireGuard
:id: TASK-OBS-04
:status: open
:status: implemented
:priority: P1
:component: observability
:readiness: ready
Expand All @@ -692,9 +714,14 @@ missing. See :doc:`index` for status definitions.
- Client secrets are never committed or printed and can be revoked individually
- Existing public application endpoints and monitoring continue to operate

**Implementation evidence:** WireGuard isolation, real-peer HTTPS access, revocation, and public
service regression acceptance are recorded on the completed task.
See `the completion record
<https://github.com/PapyrusReader/observability/issues/15>`_.

.. task:: Monitor aggregate app statistics
:id: TASK-OBS-05
:status: open
:status: implemented
:priority: P1
:component: observability
:readiness: ready
Expand All @@ -715,3 +742,8 @@ missing. See :doc:`index` for status definitions.
- Failed collection preserves the last good snapshot and exposes freshness and failure status
- History, storage growth, and recent registration windows are visible without treating gauges as counters
- Existing production services, private dashboard access, and alerts remain healthy

**Implementation evidence:** Aggregate collection, failure handling, production parity, and
authenticated dashboard acceptance are recorded on the completed task.
See `the completion record
<https://github.com/PapyrusReader/observability/issues/20>`_.
Loading