diff --git a/CHANGELOG.md b/CHANGELOG.md index d8eeba3..540e2c6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,9 +2,9 @@ All notable changes to PaperRoute Tracker will be documented here. -## [Unreleased] — v0.7 Deadline Center +## [0.7.0] - 2026-09-28 -v0.7.0-rc.1 is available on the Preview channel. Development is tracked in [PR #78](https://github.com/JUhalt/PaperRoute-Tracker/pull/78) and the [v0.7 milestone](https://github.com/JUhalt/PaperRoute-Tracker/milestone/9). +PaperRoute v0.7.0 — **Deadline Center** — was released on September 28, 2026 from [PR #78](https://github.com/JUhalt/PaperRoute-Tracker/pull/78), after the v0.7.0-rc.1 Preview. Certification is recorded in [#79](https://github.com/JUhalt/PaperRoute-Tracker/issues/79). v0.7 upgrades the library to Schema 7. ### Added @@ -23,6 +23,9 @@ v0.7.0-rc.1 is available on the Preview channel. Development is tracked in [PR # - Revision deadlines now name their journal on the Deadlines page and in calendar exports. - The **First deadline** date in Add Manuscript shows in full at 150% display scaling ([#76](https://github.com/JUhalt/PaperRoute-Tracker/issues/76)). +- The update prompt opens on **Download & Restart** instead of with its release notes selected. +- About PaperRoute scales with the display instead of clipping its text at 150%, and describes PaperRoute in its one-line description. +- Check for Publications says there is nothing to check yet when the library is empty, instead of that everything is already published. ## [0.6.0] - 2026-09-27 diff --git a/ManualCertification/V04Demo/Program.cs b/ManualCertification/V04Demo/Program.cs index 3d39fd3..7d08f44 100644 --- a/ManualCertification/V04Demo/Program.cs +++ b/ManualCertification/V04Demo/Program.cs @@ -27,7 +27,7 @@ private static void Main(string[] args) return; } - var surfaces = new[] { "vault", "readiness", "packet", "packet-new", "file", "file-new", "notes", "submission", "responses", "workflow", "board", "publications", "fill" }; + var surfaces = new[] { "vault", "readiness", "packet", "packet-new", "file", "file-new", "notes", "submission", "responses", "workflow", "board", "publications", "fill", "about" }; var positional = args.Where(argument => !argument.StartsWith("--")).ToArray(); var surface = positional.FirstOrDefault()?.ToLowerInvariant() ?? "vault"; var minimum = args.Contains("--minimum", StringComparer.OrdinalIgnoreCase); @@ -78,6 +78,14 @@ private static void Main(string[] args) return; } + if (surface == "about") + { + using var about = new AboutForm(); + ConfigureDisplayEvidence(about, primary); + about.ShowDialog(); + return; + } + if (surface == "publications" || surface == "fill") { using var check = PublicationDemo.Create(surface); diff --git a/ManuscriptPipeline/Forms/AboutForm.vb b/ManuscriptPipeline/Forms/AboutForm.vb index 98461e3..e911c0a 100644 --- a/ManuscriptPipeline/Forms/AboutForm.vb +++ b/ManuscriptPipeline/Forms/AboutForm.vb @@ -23,6 +23,9 @@ Namespace Forms Me.FormBorderStyle = FormBorderStyle.FixedDialog Me.MaximizeBox = False Me.MinimizeBox = False + ' Sizes below are at 96 DPI and scale with the display; without the + ' base dimensions the text grew at 150% but the dialog did not. + Me.AutoScaleDimensions = New SizeF(96.0F, 96.0F) Me.ClientSize = New Size(640, 410) Me.Font = New Font("Segoe UI", 10.0F) Me.AutoScaleMode = AutoScaleMode.Dpi @@ -92,7 +95,7 @@ Namespace Forms Dim lblDescription As New Label With { .Text = - "Track manuscripts from idea through submission, peer review, revision, publication—or the File Drawer—while keeping your workflow data on your own computer." & + ProductInfo.Description & Environment.NewLine & Environment.NewLine & "Open source • Local first • Built for academic publishing workflows.", .Dock = DockStyle.Fill, diff --git a/ManuscriptPipeline/Forms/PublicationCheckForm.vb b/ManuscriptPipeline/Forms/PublicationCheckForm.vb index d071779..581c1c4 100644 --- a/ManuscriptPipeline/Forms/PublicationCheckForm.vb +++ b/ManuscriptPipeline/Forms/PublicationCheckForm.vb @@ -197,7 +197,9 @@ Namespace Forms If _eligible.Count = 0 Then lstManuscripts.Enabled = False - lblSelected.Text = "Every manuscript is already on the Published shelf." + lblSelected.Text = If(_library.Count = 0, + "Add a manuscript first; there is nothing to check yet.", + "Every manuscript is already on the Published shelf.") End If UpdateSelection() diff --git a/ManuscriptPipeline/Forms/UpdatePromptForm.vb b/ManuscriptPipeline/Forms/UpdatePromptForm.vb index 4191689..b44c876 100644 --- a/ManuscriptPipeline/Forms/UpdatePromptForm.vb +++ b/ManuscriptPipeline/Forms/UpdatePromptForm.vb @@ -123,6 +123,15 @@ Namespace Forms Me.AcceptButton = btnInstall Me.CancelButton = btnLater + + ' The notes box is first in tab order, and a text box that takes + ' focus on opening selects all its text. Start on the default + ' button instead, with nothing selected. + AddHandler Me.Shown, + Sub(sender, e) + Me.ActiveControl = btnInstall + txtNotes.Select(0, 0) + End Sub Me.Controls.Add(root) End Sub diff --git a/ManuscriptPipeline/ManuscriptPipeline.vbproj b/ManuscriptPipeline/ManuscriptPipeline.vbproj index fbfb676..f50ad2a 100644 --- a/ManuscriptPipeline/ManuscriptPipeline.vbproj +++ b/ManuscriptPipeline/ManuscriptPipeline.vbproj @@ -1,7 +1,7 @@ - 0.7.0-rc.1 + 0.7.0 0.7.0.0 0.7.0.0 PaperRouteTracker @@ -9,7 +9,7 @@ PaperRoute Tracker PaperRoute Tracker Joshua Uhalt - Local-first academic manuscript tracking for researchers. + Local-first, privacy-focused app for tracking academic manuscripts from draft through submission, revision, and publication. Assets\PaperRoute.ico PaperRoute Copyright © Joshua Uhalt 2026 diff --git a/ManuscriptPipeline/Services/ProductInfo.vb b/ManuscriptPipeline/Services/ProductInfo.vb index 80658c6..d89074d 100644 --- a/ManuscriptPipeline/Services/ProductInfo.vb +++ b/ManuscriptPipeline/Services/ProductInfo.vb @@ -8,7 +8,7 @@ Namespace Services Public Const DisplayName As String = "PaperRoute" Public Const ProductName As String = "PaperRoute Tracker" Public Const Tagline As String = "Track • Submit • Publish" - Public Const Description As String = "Local-first academic manuscript tracking for researchers." + Public Const Description As String = "Local-first, privacy-focused app for tracking academic manuscripts from draft through submission, revision, and publication." ' Current PaperRoute storage names. Public Const DataFolderName As String = "PaperRoute" diff --git a/PaperRoute.Tests/UiTextMnemonicTests.vb b/PaperRoute.Tests/UiTextMnemonicTests.vb index 065dcc8..829f725 100644 --- a/PaperRoute.Tests/UiTextMnemonicTests.vb +++ b/PaperRoute.Tests/UiTextMnemonicTests.vb @@ -53,6 +53,37 @@ Public Class UiTextMnemonicTests End Sub + ' Found while certifying v0.7.0-rc.1: the update prompt opened with its + ' release notes all selected. + + Public Sub UpdatePrompt_OpensOnItsDefaultButtonWithNothingSelected() + + Dim failure As Exception = Nothing + Dim thread As New Threading.Thread( + Sub() + Try + Using prompt As New UpdatePromptForm("0.6.0", "0.7.0", "Stable", "First line." & Environment.NewLine & "Second line.") + prompt.StartPosition = FormStartPosition.Manual + prompt.Location = New Drawing.Point(-20000, -20000) + prompt.ShowInTaskbar = False + prompt.Show() + Application.DoEvents() + Dim notes As TextBox = Descendants(prompt).OfType(Of TextBox)().Single() + Assert.AreEqual(0, notes.SelectionLength, "No text is selected.") + Assert.AreEqual("Download & Restart", prompt.ActiveControl.Text.Replace("&&", "&")) + prompt.Close() + End Using + Catch ex As Exception + failure = ex + End Try + End Sub) + thread.SetApartmentState(Threading.ApartmentState.STA) + thread.Start() + thread.Join() + If failure IsNot Nothing Then Runtime.ExceptionServices.ExceptionDispatchInfo.Capture(failure).Throw() + + End Sub + ' #71: names typed by the user keep their ampersands in dialogs. Public Sub DialogsShowUserDataWithLiteralAmpersands() diff --git a/README.md b/README.md index ee0ff40..419e997 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ [![Latest Release](https://img.shields.io/github/v/release/JUhalt/PaperRoute-Tracker)](https://github.com/JUhalt/PaperRoute-Tracker/releases/latest) [![License: GPL-3.0-only](https://img.shields.io/badge/License-GPL--3.0--only-blue.svg)](LICENSE.txt) -**A local-first academic manuscript tracker for researchers.** +**Local-first, privacy-focused app for tracking academic manuscripts from draft through submission, revision, and publication.** > **Track • Submit • Publish** @@ -16,12 +16,16 @@ PaperRoute Tracker helps researchers manage manuscripts from idea through submis ## Current status -- **Stable:** [v0.6.0 — Workspace](https://github.com/JUhalt/PaperRoute-Tracker/releases/tag/v0.6.0) brings PaperRoute into one main window with pages, a tabbed page for each manuscript with a single save step, and a calmer card-based design, with no change to your library. See the [release notes](docs/releases/0.6.0.md) and the [user guide](docs/USER_GUIDE.md). -- **Preview:** [v0.7.0-rc.1 — Deadline Center](https://github.com/JUhalt/PaperRoute-Tracker/releases/tag/v0.7.0-rc.1) replaces Reminders with a **Deadlines** page for everything that needs action, and when, and adds a user-initiated **publication check**. It upgrades the library to Schema 7; read the [release notes](docs/releases/0.7.0-rc.1.md) and [upgrade notes](UPGRADE_NOTES.md) before trying it. +- **Stable:** [v0.7.0 — Deadline Center](https://github.com/JUhalt/PaperRoute-Tracker/releases/tag/v0.7.0) puts everything that needs action, and when, on one **Deadlines** page, and adds a **publication check** that runs only when you ask. See the [release notes](docs/releases/0.7.0.md) and the [user guide](docs/USER_GUIDE.md). +- **Next:** [v0.8 — Route Analytics & Reports](https://github.com/JUhalt/PaperRoute-Tracker/milestone/10): your own journal history, route statistics, shareable reports, and work types and tags. -v0.6 uses the same Schema 6 library as v0.5, so upgrading from v0.5 changes no data. v0.7 moves the library to Schema 7, which v0.6 cannot open, so keep a backup made with v0.6 first. The [upgrade notes](UPGRADE_NOTES.md) explain the save and compatibility boundaries. +v0.7 moves the library to Schema 7, which v0.6 cannot open, so keep a backup made with v0.6 before upgrading. The [upgrade notes](UPGRADE_NOTES.md) explain the save and compatibility boundaries. -**New to PaperRoute?** Start with the [PaperRoute User Guide](https://github.com/JUhalt/PaperRoute-Tracker/blob/v0.6.0/docs/USER_GUIDE.md) for a Quick Start, feature tour, and task-oriented "How do I...?" reference. +**New to PaperRoute?** Start with the [PaperRoute User Guide](https://github.com/JUhalt/PaperRoute-Tracker/blob/v0.7.0/docs/USER_GUIDE.md) for a Quick Start, feature tour, and task-oriented "How do I...?" reference. + +

+ The PaperRoute board: pipeline cards with stage, what needs attention, target journal, and each manuscript's route so far (fictional sample data) +

## What PaperRoute does @@ -33,6 +37,10 @@ v0.6 uses the same Schema 6 library as v0.5, so upgrading from v0.5 changes no d - **Visual Route View** showing submissions, decisions, revisions, and reroutes in order. - **Version History** with immutable managed snapshots, linked files, or metadata-only versions associated with submissions, decisions, and revision rounds. +

+ The Deadlines page: overdue, today, next 7 days, later, and undated items, each with its own actions (fictional sample data) +

+ ### Prepare and submit - **Journal submission history** with manuscript numbers, dates, notes, and publisher portal links. @@ -188,8 +196,8 @@ PaperRoute is an independent, open-source project. Its implementation, local-fir | --- | --- | --- | | **Released** | v0.5 — Reviewer Response Workflow | Response matrix, drafting, and Markdown export | | **Released** | v0.6 — Workspace | One window, manuscript pages, one save step, calmer design | -| **Preview** | [v0.7 — Deadline Center](https://github.com/JUhalt/PaperRoute-Tracker/milestone/9) | Everything that needs action, and when; the publication check | -| **Then** | [v0.8 — Route Analytics & Reports](https://github.com/JUhalt/PaperRoute-Tracker/milestone/10) | Your own turnaround data, route and status reports, types and tags | +| **Released** | v0.7 — Deadline Center | Everything that needs action, and when; the publication check | +| **Now** | [v0.8 — Route Analytics & Reports](https://github.com/JUhalt/PaperRoute-Tracker/milestone/10) | Your own turnaround data, route and status reports, types and tags | | | [v0.9 — 1.0 Hardening](https://github.com/JUhalt/PaperRoute-Tracker/milestone/11) | Onboarding, accessibility, recovery, certification | | **Goal** | [v1.0 — Trusted Research Workflow](https://github.com/JUhalt/PaperRoute-Tracker/milestone/12) | "I trust this application with my research workflow." | diff --git a/ROADMAP.md b/ROADMAP.md index e699ab1..12a7bcb 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -52,8 +52,8 @@ Targets are directional rather than promises. Data integrity, migrations, backup | **v0.4** | Submission Readiness ✅ | What exactly am I preparing and sending to this journal? | | **v0.5** | Reviewer Response Workflow ✅ | What did the journal ask me to change, and how am I responding? | | **v0.6** | Workspace UI ✅ | Can I find and act on everything from one calm, uncluttered workspace? | -| **v0.7** | **Deadline Center — active** | What requires action, and when? | -| **v0.8** | Route Analytics & Reports | What does this publication journey show me—and how can I communicate it? | +| **v0.7** | Deadline Center ✅ | What requires action, and when? | +| **v0.8** | **Route Analytics & Reports — next** | What does this publication journey show me—and how can I communicate it? | | **v0.9** | 1.0 Hardening | Is the entire workflow polished, resilient, and certifiable? | | **v1.0** | Trusted Research Workflow | Would I trust this with my real publication pipeline? | @@ -275,7 +275,7 @@ PaperRoute v0.6.0 was released on September 27, 2026 from [PR #75](https://githu --- -# ACTIVE — v0.7 Deadline Center +## COMPLETE — v0.7 Deadline Center Milestone: **[v0.7.0 — Deadline Center](https://github.com/JUhalt/PaperRoute-Tracker/milestone/9)** @@ -299,7 +299,7 @@ Planned slices, tracked in the v0.7 integration PR: 4. **Carry-over:** [#76](https://github.com/JUhalt/PaperRoute-Tracker/issues/76). 5. **Certification and release.** Preview, then Stable, using the v0.6 procedure: in-app updater only, an unlocked host for VM checks, and snapshots before each VM step. -Slices 1–4 are complete in [PR #78](https://github.com/JUhalt/PaperRoute-Tracker/pull/78). v0.7.0-rc.1 is the Preview candidate; certification is tracked in the v0.7 release-certification issue. +PaperRoute v0.7.0 was released on September 28, 2026 from [PR #78](https://github.com/JUhalt/PaperRoute-Tracker/pull/78), after the v0.7.0-rc.1 Preview. It moved the library to Schema 7 with a marker-only upgrade. Certification (published-asset verification, an installed v0.6.0 upgraded through the live Preview updater with byte-identical data files, clean installation, and the live Stable updater) is recorded in [#79](https://github.com/JUhalt/PaperRoute-Tracker/issues/79). --- diff --git a/UPGRADE_NOTES.md b/UPGRADE_NOTES.md index 6dcd650..fbc0c3f 100644 --- a/UPGRADE_NOTES.md +++ b/UPGRADE_NOTES.md @@ -21,7 +21,7 @@ Use **Settings → Backup Library...** to create a portable backup. In v0.5 and ## Moving from v0.6 to v0.7 -PaperRoute v0.7 replaces the Reminders page with **Deadlines** and adds the publication check. It upgrades the library to **Schema 7**, which remembers possible publications you have reviewed. +PaperRoute v0.7 replaces the Reminders page with **Deadlines** and adds the publication check. **v0.7.0 is the current Stable release.** It upgrades the library to **Schema 7**, which remembers possible publications you have reviewed. Before upgrading, create a portable ZIP backup with v0.6 (**Settings → Backup Library...**) and keep it separately. @@ -35,7 +35,7 @@ After upgrading: ## Moving from v0.5 to v0.6 -PaperRoute v0.6 changes where things live and how they look. **v0.6.0 is the current Stable release.** It does **not** migrate your data: the library stays on **Schema 6**, so v0.5 can still open a library that v0.6 has used, and portable backups made by either version restore in both. A backup before upgrading is still a sensible precaution. +PaperRoute v0.6 changes where things live and how they look. It does **not** migrate your data: the library stays on **Schema 6**, so v0.5 can still open a library that v0.6 has used, and portable backups made by either version restore in both. A backup before upgrading is still a sensible precaution. What to expect after upgrading: diff --git a/docs/USER_GUIDE.md b/docs/USER_GUIDE.md index 2212478..18d634c 100644 --- a/docs/USER_GUIDE.md +++ b/docs/USER_GUIDE.md @@ -862,16 +862,14 @@ PaperRoute ships a local copy of this guide. Open it with **Help** at the bottom --- -## What Comes After v0.5? +## What Comes Next? -The Route, Version History, readiness profiles, submission packets, and reviewer responses form one connected manuscript record. Later releases build on that record: +The Route, Version History, readiness profiles, submission packets, reviewer responses, and Deadlines form one connected manuscript record. Later releases build on that record: -- **v0.6 — Workspace UI:** one main window with pages for the Board, Library, Journals, Reminders (now Deadlines), and Import & Export; each manuscript opens as a tabbed page with a single Save / Discard step; a calmer card-based design; and faster Add Manuscript from a pasted title page. -- **v0.7 — Deadline Center:** richer action and deadline management, plus user-initiated checks for publications and missing metadata. -- **v0.8 — Route Analytics & Reports:** timing analytics, your history with each journal, printable route and pipeline-status reports, and work types and tags. +- **v0.8 — Route Analytics & Reports:** your own history with each journal, route statistics from recorded dates, printable route and pipeline-status reports, and work types and tags. - **v0.9 — 1.0 Hardening:** guided onboarding, accessibility, consistency, recovery, and release certification. -Optional AI assistance for extracting reviewer actions remains a proposal for after 1.0. Planned releases are directional and may change; see the [roadmap](https://github.com/JUhalt/PaperRoute-Tracker/blob/master/ROADMAP.md). +Planned releases are directional and may change; see the [roadmap](https://github.com/JUhalt/PaperRoute-Tracker/blob/master/ROADMAP.md). The in-app `?` guidance is intentionally reusable so a future guided tutorial can teach the same concepts without maintaining a second vocabulary. diff --git a/docs/images/board.png b/docs/images/board.png new file mode 100644 index 0000000..10bff98 Binary files /dev/null and b/docs/images/board.png differ diff --git a/docs/images/deadlines.png b/docs/images/deadlines.png new file mode 100644 index 0000000..26135ca Binary files /dev/null and b/docs/images/deadlines.png differ diff --git a/docs/releases/0.7.0.md b/docs/releases/0.7.0.md new file mode 100644 index 0000000..5c20d11 --- /dev/null +++ b/docs/releases/0.7.0.md @@ -0,0 +1,20 @@ +# PaperRoute Tracker v0.7.0 — Deadline Center + +**Released September 28, 2026.** PaperRoute v0.7.0 is the current Stable release. It replaces the Reminders page with **Deadlines**, one list of everything that needs action and when, and adds a publication check that runs only when you ask. PaperRoute remains a local-first, privacy-focused app for tracking academic manuscripts from draft through submission, revision, and publication. + +## What's new + +- **Deadlines.** Revision deadlines, journal follow-ups, your reminders, unfinished submission preparation, and possible publications, grouped as Overdue, Today, Next 7 days, Later, No date, and Done. Counts across the top, chips for each kind, and a filter box. A revision shows how many reviewer comments are addressed, and work without a date stays visible instead of disappearing. +- **Act where you are.** **Open** lands on the submission (at its reviewer responses for a revision), **Postpone...** offers tomorrow, a week, two weeks, or any date, **Done** completes a reminder, and **Clear Follow-up...** removes only the follow-up date. Every change is made on the record that owns the date, so Deadlines and the manuscript page always agree. +- **Always in view.** The rail's Deadlines badge counts what is overdue or due today, and **View in Deadlines →** sits beside Needs Attention on the Board. **Ctrl+4** opens Deadlines. +- **Check for Publications...** asks Crossref, and optionally an ORCID record, whether manuscripts you are tracking have been published: by DOI, by a preprint's link to its published version, or by title. Each possible match offers **Review Match**, **Mark Published...**, and **Ignore**. Nothing is checked in the background, and nothing changes until you choose. +- **Mark Published...** lists exactly what it will change before recording a normal lifecycle event. **Fill Blanks from Crossref...** fills empty publication fields after a preview and never replaces a value. +- **Fixes.** Revision deadlines name their journal. The first-deadline date in Add Manuscript shows in full at 150% scaling. The update prompt opens on its Download & Restart button instead of with its notes selected. About PaperRoute scales with the display instead of clipping at 150%. + +## Upgrading + +v0.7 upgrades the library to **Schema 7**, which remembers the possible publications you have reviewed. The upgrade validates your library and changes only the schema marker; manuscript data, managed files, and automatic backups stay byte-for-byte. **v0.6 cannot open a library after v0.7 has used it**, so make a portable backup with v0.6 first (**Settings → Backup Library...**) and keep it. The [upgrade notes](https://github.com/JUhalt/PaperRoute-Tracker/blob/master/UPGRADE_NOTES.md) explain the details. + +## Verification + +Release certification is recorded in [#79](https://github.com/JUhalt/PaperRoute-Tracker/issues/79). Every automated test passed with none skipped. Published assets were verified after a fresh download. An installed v0.6.0 was upgraded to v0.7.0-rc.1 through the live Preview updater: the library moved to Schema 7, the previous marker was kept byte-for-byte, and every data and managed file stayed byte-identical. Clean installation was checked on the Stable candidate. The live Stable updater check from v0.6.0 follows publication.