Plant-Tracer/webapp Releases

Release History

Releases

Name

Version

Date

Issues

Spring 2024

0.9.2

May 19 2024

Not tracked yet

Oct2024

0.9.3

October 8, 2024

Closed Issues

Dec2024

0.9.4

December ??, 2024

Closed Issues

Mar2025

0.9.5

March 22, 2025

Closed Issues

Apr2025

0.9.6

April 30, 2025

Closed Issues

April2026

0.9.7

April 26, 2026

Closed Issues

May062026

0.9.7.3

May 8, 2026

Closed Issues

May122026

0.9.7.4

May 12, 2026

Closed Issues

May-16-2026

0.9.7.5

May 16, 2026

Closed Issues

May-16-2026-2

0.9.7.5.1

May 16, 2026

Closed Issues

May-27-2026

0.9.7.6

May 27, 2026

Closed Issues

May-28-2026

0.9.7.6.2

May 28, 2026

Closed Issues

Jun-22-2026

0.9.8

June 22, 2026

Closed Issues

Jun-23-2026

0.9.8.1

June 23, 2026

Closed Issues

Jun-29-2026

0.9.8.2

June 29, 2026

Closed Issues

Release Notes

Unreleased Summary

  • Deployment: advance the application version to 0.9.9.10 for the next development deployment.

  • Admin: shrink dashboard tables with the browser down to a 1024-pixel minimum before enabling table-local horizontal scrolling, and display each course administrator on a separate line; compact Movies with ellipsized titles, 24-hour timestamps, concise measurements, and complete titles in verbose details.

  • Admin: fill available browser width, add whole-table resize handles with table-local overflow, identify Super Admin and Super Auditor sessions, and move course and mutually exclusive user-role operations into row Actions menus.

  • Deployment: align both Lambda DynamoDB policies with the complete audited runtime action set, including ConditionCheckItem for transactional actor authorization checks.

  • Developer: complete the uv-only Python workflow with one uv.lock, standard dependency groups, locked Lambda requirement exports, and Hatchling as the wheel build backend.

  • Deployment: reduce the lambda-resize ZIP by exporting only its dedicated dependency group, relying on the managed Boto3/Botocore runtime and Powertools layer, replacing Requests and Pillow paths, and calling the bundled H.264 encoder without the full ImageIO package.

  • Admin: load movies with numeric research-attribution choices without failing the dashboard summary.

  • Build: refresh Python and JavaScript dependencies and require Node.js 22.18.0 or newer for the JavaScript toolchain.

  • Admin: fit dashboard tables to the browser width without horizontal table scrollbars.

  • Developer: package the S3 EventBridge configuration utility as uv run s3_upload_trigger and consistently execute Python programs from Makefile targets through uv run, with a complete standard development dependency group for clean-checkout builds.

  • Deployment: automatically repair and verify the selected S3 bucket’s browser CORS policy and EventBridge delivery after every deployment and again before the deployed workflow creates test data, preserve other notification destinations, clean up staging objects, and include bounded response details when an HTTP step fails.

  • Upload: distinguish S3 transfer completion from the 1–3 minute processing phase, report a useful five-minute timeout, disable Play and Analyze until durable movie data exists, and reject direct Analyze initialization for incomplete uploads.

  • Movies: show one prominent upload button on the movie list instead of repeating upload links after each movie section

  • Operations: replace five continuously polling SQS event-source mappings with stack-scoped EventBridge push events for post-upload and tracing work; retain an unpolled failure DLQ and SnapStart for lambda-web

  • Movies: rename the user-facing Unpublished state to Hidden now that movies are published immediately after upload

  • Movies: prevent concurrent tracing and make Analyze read-only while a trace is running

  • Analyze: acquire a movie-row lease on entry so concurrent browsers are view-only

  • Courses: make the current-course pull-down tab-local, send course_id with course-scoped browser requests, and add an explicit Make default action

  • Data model: rename the profile’s primary_course_* fields to default_course_* with read compatibility and a dry-run migration tool

  • Security: serve the MP4 demuxer locally, integrity-protect the remaining pinned demo dependencies, bound WebCodecs frame retention, and avoid automatically contacting the demo movie host

  • Upload: prevent duplicate movie-rotation requests while a rotation is being saved

  • Analyze: prevent concurrent tracing of a movie and keep Analyze read-only while tracing runs

  • Analyze: restore live tracing-frame progress and completion updates while reminding users that they may leave the page and reopen Analyze later

  • Developer: add a Makefile-driven analysis-MP4 CLI that creates a portable WebCodecs player bundle for manual cross-browser frame-step verification

  • Developer: run the deployed workflow verifier with an endpoint-only uv run command that discovers deployment identity and uses committed references

  • Deployment: honor STACK_NAME as a per-stack config selector, pass the target to SAM explicitly, synchronize CLI stack and DynamoDB-prefix overrides into the selected TOML file, and default the prefix to <stack>-

  • Deployment: republish the lambda-web live alias when environment or other function properties change, keeping SnapStart configuration and IAM resource scopes synchronized

  • Operations: restore deployment-isolated S3 EventBridge upload completion, post-upload processing, lifecycle logging, retry/DLQ handling, and an automated deployed upload/trace workflow

  • Developer: centralize runtime S3 object-key templates and formatting helpers while preserving legacy movie URNs

  • Analyze: open trimmed movies on their first included frame and keep Retrace disabled until marker data changes

  • Analyze: keep results below the movie and marker controls, with position graphs side-by-side when the viewport is wide enough and stacked otherwise

  • Tracing: keep markers when optical flow temporarily loses them and use the loaded analysis-frame height for bottom-left coordinate conversion

  • Operations: restore deployment-isolated S3 EventBridge upload completion, post-upload processing, lifecycle logging, retry/DLQ handling, and an automated deployed upload/trace workflow

  • Developer: centralize runtime S3 object-key templates and formatting helpers while preserving legacy movie URNs

  • Admin: add creation, upload, and last-movie-activity dates; FPM-based elapsed time, frame and byte sizes, resizable columns, course links, and a visible movie action menu

  • Admin: let superadmins create courses, select or enter the initial administrator, audit the change, and send the administrator a setup email while keeping superauditors and course administrators read-only

  • Developer: remove obsolete lambda-resize scratch files, rename its legacy SQS-named diagnostic CLI, keep linked .tmp worktrees out of JavaScript test and coverage discovery, and make ESLint inspect files in required worktrees

  • Movies: distinguish created from successfully uploaded records with created_at and uploaded_at, highlight pending uploads, verify exact-size direct uploads, and maintain last_activity_at through DDBO.update_movie()

  • Authorization: give superadmin and superauditor cross-course movie read access while keeping cross-course movie writes and Analyze unavailable to superauditor; owners retain Analyze for their own movies

  • Developer: add the first read-only /admin page and GET /api/admin/summary endpoint for super-role admin work

  • Authorization: give course administrators the Admin panel while limiting courses, users, movies, counts, memberships, and per-movie media checks to their administered courses

  • Admin: show course registration keys behind per-row reveal controls and current/max enrollment, named user memberships with course-admin emphasis, and cross-course movies; load bounded pages and sort complete tables in the browser

  • Admin: let superadmin users atomically add or remove course administrators with explicit names, confirmations, final-administrator protection, retained enrollment, and attributed audit records

  • Admin: let course administrators manage administrators for their own courses and let superadmins grant or remove superadmin access, with automatic enrollment and final-role protection

  • Navigation: make the current course a membership-validated selector that reloads the page in the selected course context

  • Developer: add dbutil commands to list users and super-role users, and to grant or remove course-admin, superadmin, and superauditor access by email

  • Developer: bind admin restart markers to their DynamoDB table and serialize super-role mutations so concurrent commands cannot remove the final superadmin

  • Developer: document local versus remote S3/DynamoDB modes and add Makefile targets for running local code against remote AWS storage

  • Developer: add src/dbbackup.py for default full and selective Plant Tracer .ptb backups, restores, archive inspection, dry-run restore-link sending, and course migration

  • Developer: add verbose backup inspection with per-record summaries and grouped frame-trackpoint ranges

  • Developer: add dbbackup list-prefixes to discover complete DynamoDB table prefixes and report course/user/movie counts with an aligned UTC from/to date range

  • Developer: add dbutil list-prefixes, show available prefixes when DYNAMODB_TABLE_PREFIX is missing, and add make show-local-vars for direct local-debug commands

  • Developer: make dbbackup list-prefixes offer aws sso login and retry when AWS SSO token retrieval fails

  • Developer: make dbbackup backup report progress to stderr and skip missing movie MP4 objects with manifest warnings instead of failing after writing a partial archive

  • Developer: make dbbackup backup refuse to overwrite an archive from a different DynamoDB table prefix and reuse already archived movie MP4 objects when refreshing a same-prefix backup

  • Developer: make dbbackup restore preflight missing target table prefixes and create them only when --commit is supplied

  • Developer: make dbbackup restore explicitly report that no restore was done when --commit is omitted

  • Developer: make dbbackup restore use archived movie-object buckets when PLANTTRACER_S3_BUCKET is not configured

  • Developer: make dbbackup report backup, inspect, and restore S3 bucket choices and require confirmation before committed archive-bucket restores

  • Developer: parallelize dbbackup restore table creation, movie-object uploads, and movie_frames writes grouped by movie ID

  • Test: add integration contract coverage for backup selection, default full backup, prefix discovery, restore preflight/commit/collision handling, dry-run restore links, verbose inspection, and course migration using DynamoDB Local and MinIO

0.9.8.2 Summary

  • Documentation: new Calculation Reference page covering gravitropism and circumnutation statistics formulas

  • Documentation: styled to match the Plant Tracer site fonts and colors

  • Documentation: updated User Tutorial to cover 0.9.8.x features

  • Infrastructure: CloudFormation/SAM template and Makefile hardened for deployment

0.9.8.1 Summary

  • Analyze: Download Trackpoints CSV now expresses position values in mm when Ruler markers are calibrated (moved off their default positions); Ruler marker columns remain in pixels

  • Analyze: Download analysis as an Excel XLSX file with marker summary and native Excel charts

0.9.8 Summary

  • Analyze: aggregate trace result statistics — Gravitropism (Distance, Angle) and Circumnutation (Max Amplitude), selectable via a results control

  • Analyze: special Inflection Point marker used as the pivot for the gravitropism Angle

  • Analyze: Rate statistics, computed from a user-entered capture interval (frames/minute) set on the Upload or Analyze page

  • Analyze: trackpoints now use a bottom-left coordinate system; position graphs unflipped; lazy migration of existing movies made concurrency-safe

  • Analyze: multi-marker graphing with per-marker colors

  • Analyze/Movies: video trimming — trace and export a selected frame range

  • Movies: deleting a user also removes their course enrollments (no more ghost enrollment IDs)

  • Documentation: developer docs reorganized under docs/Development/; updated upload tutorial; corrected MOVIE_METADATA references

  • Process: release-process improvements — pre-tag make check, scripted release notes, and commit/PR issue-traceability requirements

0.9.7.6.2 Summary

  • Analyze: fix Download Trackpoints CSV — was nearly empty and opened in a browser tab instead of downloading

  • Analyze: Download Trackpoints button now correctly enabled after tracing completes

  • Analyze: movie canvas no longer resets to 100% zoom after tracing completes

0.9.7.6 Summary

  • Movies: fix bug where all students could see unpublished movies of other students

  • Movies: new uploads are now Published by default

  • Movies: movie tables now sorted newest-first by default

  • Movies: sortable columns via DataTables; table style matches Marker table on Analyze page

  • Movies: added Research Use and Credit columns, editable by uploader

  • Upload: research permission changed from checkbox to Yes/No radio buttons

  • Upload: research use option now references a Contributor Agreement

  • Upload: attribution name field pre-filled with user’s display name

  • Analyze: clarified RulerXXmm marker naming rules on page and in tutorial

  • Developer: Jest coverage threshold enforced locally via npm run coverage

  • Developer docs: added Release Process documentation

  • Process: documentation review required when completing any Issue or PR

0.9.7.5.1 Summary

  • Process: document annotated tag convention and linked issue numbers in release notes

  • Process: improve release process documentation in CLAUDE.md

0.9.7.5 Summary

  • Users: fix several regressions — listing, formatting, duplicate sections, First/Last Seen columns

  • Users: add names support to bulk registration

  • Users: fix HTTP 500 error when registering a user

  • Documentation: update User Tutorial to current prod functionality

  • Documentation: update DynamoDB schema documentation; create Flask API endpoint reference

  • Email: improve login email template HTML for better client compatibility

  • Dev: add MAILER_DRY_RUN env variable and Mailpit local SMTP catcher for local email testing

  • Dev: add PostToolUse hook to auto-check Sphinx docs build after editing docs/

  • Process: document release process (milestone prep, tagging, release notes) in CLAUDE.md

0.9.7.4 Summary

  • Movies: fix exceptions when editing movie name or user fields

  • Movies: show accurate movie status values

  • Users: fix ReferenceError for bulk_register_setup

  • Users: fix HTTP 500 error when registering a user

  • Analyze: fix Download Trackpoints button not enabled

  • Analyze: fix position graphs not taking up full canvas size

  • Audit: fix Internal Server Error and ReferenceError

  • Alerts: show with more spacing and yellow background

  • Copyright: extend to 2026

  • Research permission: update privacy policy

0.9.7.3 Summary

  • Documentation: update User Tutorial for new instance

  • UI: match webapp look and feel to planttracer.com

  • Developer docs: move to docs/Development/ subfolder

  • Test: add canvas_tracer_controller.js unit tests

0.9.7 Summary

  • Upload/Analyze: move Rotate Movie function to Upload page; fix bugs

  • Upload/Analyze: resize movie to 640x480 (max in either dimension) on upload

  • dbutil: convert to DynamoDB; add report and test-mail functions; improve register

  • Infra: move tracking code to AWS Lambda function

  • Infra: replace MySQL with Amazon DynamoDB

  • Infra: build and deploy using AWS Cloud Formation and SAM

  • Infra: make local development environment easier to work with

  • Infra: migrate to uv and improve test coverage

0.9.6 Summary

  • Analyze: move some instructions to top of page for easier visibility

  • Analyze: make it clearer in the UI that users don’t have to add any new markers in order to track a movie

  • Register: trim surrounding whitespace from Course Key input

  • Movies: Course admins can now publish movies that they uploaded themselves

  • Users: implement bulk registration of users

  • dbutil: set course max_enrollment default to 50

  • Webapp: add git information to web page footer

  • Webapp: set the version (release) number in one place

  • Infra: require cronie package on Amazon Linux 2 deployments

0.9.5 Summary

  • Analyze: support pixels to mm conversion

  • Analyze: populate Marker Table’s Location (mm) column

  • Analyze: flip the sign of the y-position graph

  • Documentation: create the User Tutorial

  • Documentation: create (incomplete) developer setup instructions for Amazon Linux 2

  • Movie Upload: set upload limit to 150MB

  • Test: Create Jest unit tests for all planttracer.js functions

  • Webapp: migrate from Bottle to Flask

  • Infra: support deployment to Amazon Web Services (AWS) EC2 instance

  • Infra: support deployment of multiple webapp server instances to project AWS account

0.9.4 Summary

  • dbmaint: add add-admin and remove-admin commands

0.9.3 Summary

  • Analyze: Add two line graphs of plant motion: x vs time and y vs time

  • Analyze: Download Trackpoints button is fixed

  • Analyze: Default Ruler markers are at 0 and 10 mm, rather than 0 and 20 mm

  • Analyze: Add explanatory text

  • Analyze: Add rotate movie 90° function

  • Analyze: Fix several movie tracking errors and hangs

  • Movies list: in demo mode is consistent with demo mode capabilities – a single list with no categories

  • Demo Mode: All functions not available in demo mode removed from the UI while in demo mode

  • Movies list: publish/unpublish control now are now described as buttons rather than checkboxes

  • Movies list: publish/unpublish/delete/undelete buttons now properly refresh the page

  • List and Analyze: Move some movie processing from server to client

  • List and Analyze: Movie playback no longer flashes

  • Users: page cleanup

  • Audit: populate Audit Log section of page; was errroneously always empty

  • Menu: Show Users page, show Register and Resend when not logged in, adjust for demo mode, add Help

  • Copyright and Terms of Use: page cleanup

  • dbmaint: help documentation cleanup

  • Documentation: converted from Markup to ReStructuredText. Index created.

  • Documentation: update and make more complete

  • Documentation: Installation steps updated

  • Documentation: Add ReleaseHistory page