# Changelog Notable changes to Seedcorn (called "Timeline" up to version 1.0.0). The format follows [Keep a Changelog](https://keepachangelog.com/), and versions follow [Semantic Versioning](https://semver.org/). ## [Unreleased] ## [1.2.0] - 2026-09-20 ### Added - **Lessons learned.** A template said "worked in 9 of 11 closed-out runs" and nothing about the other two. Now what people type when they close out a project appears on the template's page, under the track record: their words, how that run went, the month, and their username or *Anonymous*, never the project's name or its cost. Anonymous means nobody is told, the template's owner and admins included. - The close-out asks a question that fits the answer: *What went wrong? When would you not use this plan?* for a run that did not work, *What stopped it?* for one that stopped early. - A template's owner can add up to seven notes of their own, shown first and copied with the template, and can take a lesson down (not reword it). Admins can take down any lesson, built-in templates included, and a lesson can be reported like a comment. - Starting a project from a template shows the owner's notes and the five newest lessons under the start date. - `load_sample --clear` now also reseeds the shared library template and its runs, which include lessons, a run that did not work and an owner's note. ### Changed - The close-out's two tick boxes, "Send this to the template's owner" and "Also post it as a comment", are gone: a typed lesson goes to Lessons learned, and the dialog says so. Lessons sent or posted before stay where they are, and nothing earlier is published. The API ignores `lesson_to_owner` and `post_as_comment` from older clients instead of refusing them. - README: a shorter first line, the meaning of the name up front, and shorter cost and sharing bullets that link to the user guide. ### Upgrading - One migration, `projects/0013_lessons_learned`, which only adds columns and a table. It runs by itself when the backend container starts. No settings change. ## [1.1.0] - 2026-09-20 ### Timeline is now Seedcorn - **The project has a new name.** "Timeline" described one view of the app and could not be found by searching. *Seedcorn* is the grain a farmer keeps back from this harvest to plant the next one, which is what a plan that worked is: you run a project, adjust the plan as you go, and hand the version that got you there to whoever does it next. Nothing else changes: same code, same Apache 2.0 license, same data, same URLs inside the app. The repository moved to `github.com/vakahnke/seedcorn`; the old address redirects, and existing clones keep working. - If you host your own copy, the name now shown in the app, in emails and in exports is "Seedcorn". Set `APP_NAME` (server) and `VITE_APP_NAME` (app build) to keep the old name or use your own. Mail filters built on "[Timeline]" in the subject need updating. Calendar entries already imported keep updating: their IDs never contained the product's name. - The word "Timeline" still names the timeline *view*, as before. ### Added - **A template library.** A saved template can be shared with chosen teams or with everyone on the server, and the new Templates page lets people search, filter and sort what they can see. Each template has its own page with the plan drawn out, upvotes, comments and "make my own copy". Projects now remember the template they were started from, which gives every template a track record: started, finished, in flight, stalled, and how finished runs ran against the plan once three have finished. Totals only, and a project's owner can keep it out of the count. - Sharing a template is a review step: you see every note and to-do title that would be shared, anything that looks like an email address, phone number or link is pointed out, and you can leave out notes or to-dos or share without your name. - **Closing out a project.** When the last event in a project that came from a template reaches 100%, its owner is offered three optional questions: how the plan worked (it worked, it worked with changes, it did not work, we stopped early), what it cost in money and/or person-days, and what to change next time. "Not now" is remembered, and **Close out…** is always in the gear menu. A template then shows "worked in 9 of 11 closed-out runs" and "typically costs about $14,000", under stricter rules than the time figure: a middle figure only, never a lowest or highest, three figures in one currency before anything appears, rounded, never converted, and a per-run switch to keep the numbers out. `DEFAULT_CURRENCY` sets the currency offered first. - **The project a template was saved from counts as its first run**, so a new template starts with one real data point instead of none. Saving a finished project as a template offers its close-out there and then. That first run never enters the plan-versus-actual figure, since its length is the plan's length. - **Lessons reach the template's owner.** "What would you change next time?" can be sent to the owner of the template the project came from (text and date only, never which project) and, separately, posted as a comment under your own name. Both are your choice on each close-out. - The product's name now comes from one place on each side: `APP_NAME` for the server (emails, exported status reports, calendar files) and `frontend/brand.json` or `VITE_APP_NAME` for the app. Anyone hosting their own copy can put their own name on it. Nothing looks different. - `TEMPLATE_LIBRARY` (`instance`, `teams` or `off`) lets an operator cap how far templates can be shared. Flagged templates and comments appear in the Django admin. ### Changed - **A saved template is now the plan, not the record of one run.** Saving a finished project as a template keeps key-milestone flags and each event's to-do list, and no longer carries progress: a project started from it begins at zero percent with every to-do open and assigned to you. Templates saved earlier also start at zero. - The README leads with what the project is for: plan it, try the plan, adjust it as you go, and share the successful result. ### Fixed - An event about 140px wide could not be Ctrl/⌘-dragged by its centre, because the hover buttons sat there. ## [1.0.0] - 2026-09-19 The first tagged release. Everything below is in it. ### Planning - A canvas-drawn Gantt timeline: drag to pan, Ctrl/⌘-drag to move an event, drag an edge to resize, smooth zoom from months to minutes, a minimap, dependency arrows, and the critical path highlighted automatically. Undo and redo for every change. - Three views of one plan: Timeline, List, and a Board that groups tasks by status. - Events with notes, percent complete, key-milestone flag, predecessors and successors, sub-tasks with owners and due dates, and a comment thread. The API refuses dependency loops. - Project templates: 21 built-ins for business, engineering and hobby projects, plus your own saved templates, instantiated at a start date you choose. - Works on a phone: drag to pan, pinch to zoom, press and hold to move an event, grab dots to resize. The layout survives rotation. ### Status report - A one-page status report filled in from the schedule: a status derived by rule with the rule printed, a drafted headline, the decision you need, five numbers against a reference, a simplified timeline, what finished, what is next, and the top risks. Click any text to reword it. - Print or save as a PDF (16:9 slide, or a Letter/A4 handout), or download a native, fully editable PowerPoint file. - Optional, per report: slip against a frozen baseline, "what moved since last report", and a milestone trend chart. Per-project limits for At risk and Off track. - On a phone: a Report tab, the slide shown whole, and a readable version below it. ### Working with other tools - Export to iCalendar (`.ics`) for Outlook, Google Calendar and Apple Calendar. - Export to Microsoft Project XML, validated against Microsoft's published schema. - A documented REST API (OpenAPI, Swagger and ReDoc) behind everything the app does. ### Teams and access - Private projects with four roles (viewer, commenter, editor, owner), teams that grant access to a whole group at once, and a workload view across members. - Authorization is decided on the server from the caller's current membership, never from anything the client sends, with an adversarial test suite to keep it that way. - Password reset by email, account approval for new sign-ups, and a people directory that only shows the people you already work with. ### Running it - `SEED_DEMO=1 docker compose up --build` gives a working instance with sample projects in about two minutes. Production compose file with nginx and gunicorn; a single-container image for platforms like Railway. - Django 6.1, React 19, Vite 8, PostgreSQL 15+. Dependabot, secret scanning and CI are enabled. [1.2.0]: https://github.com/vakahnke/seedcorn/releases/tag/v1.2.0 [1.1.0]: https://github.com/vakahnke/seedcorn/releases/tag/v1.1.0 [1.0.0]: https://github.com/vakahnke/seedcorn/releases/tag/v1.0.0