Plant-Tracer/webapp Releases¶
Release History¶
Name |
Version |
Date |
Issues |
|---|---|---|---|
Spring 2024 |
0.9.2 |
May 19 2024 |
Not tracked yet |
Oct2024 |
0.9.3 |
October 8, 2024 |
|
Dec2024 |
0.9.4 |
December ??, 2024 |
|
Mar2025 |
0.9.5 |
March 22, 2025 |
|
Apr2025 |
0.9.6 |
April 30, 2025 |
|
April2026 |
0.9.7 |
April 26, 2026 |
|
May062026 |
0.9.7.3 |
May 8, 2026 |
|
May122026 |
0.9.7.4 |
May 12, 2026 |
|
May-16-2026 |
0.9.7.5 |
May 16, 2026 |
|
May-16-2026-2 |
0.9.7.5.1 |
May 16, 2026 |
|
May-27-2026 |
0.9.7.6 |
May 27, 2026 |
|
May-28-2026 |
0.9.7.6.2 |
May 28, 2026 |
|
Jun-22-2026 |
0.9.8 |
June 22, 2026 |
|
Jun-23-2026 |
0.9.8.1 |
June 23, 2026 |
|
Jun-29-2026 |
0.9.8.2 |
June 29, 2026 |
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
ConditionCheckItemfor 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_triggerand consistently execute Python programs from Makefile targets throughuv 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
Unpublishedstate toHiddennow that movies are published immediately after uploadMovies: 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_idwith course-scoped browser requests, and add an explicit Make default actionData model: rename the profile’s
primary_course_*fields todefault_course_*with read compatibility and a dry-run migration toolSecurity: 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 runcommand that discovers deployment identity and uses committed referencesDeployment: honor
STACK_NAMEas 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
livealias when environment or other function properties change, keeping SnapStart configuration and IAM resource scopes synchronizedOperations: 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 menuAdmin: 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
.tmpworktrees out of JavaScript test and coverage discovery, and make ESLint inspect files in required worktreesMovies: distinguish created from successfully uploaded records with
created_atanduploaded_at, highlight pending uploads, verify exact-size direct uploads, and maintainlast_activity_atthroughDDBO.update_movie()Authorization: give
superadminandsuperauditorcross-course movie read access while keeping cross-course movie writes and Analyze unavailable tosuperauditor; owners retain Analyze for their own moviesDeveloper: add the first read-only
/adminpage andGET /api/admin/summaryendpoint for super-role admin workAuthorization: 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
superadminusers atomically add or remove course administrators with explicit names, confirmations, final-administrator protection, retained enrollment, and attributed audit recordsAdmin: 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
dbutilcommands to list users and super-role users, and to grant or remove course-admin,superadmin, andsuperauditoraccess by emailDeveloper: bind admin restart markers to their DynamoDB table and serialize super-role mutations so concurrent commands cannot remove the final
superadminDeveloper: document local versus remote S3/DynamoDB modes and add Makefile targets for running local code against remote AWS storage
Developer: add
src/dbbackup.pyfor default full and selective Plant Tracer.ptbbackups, restores, archive inspection, dry-run restore-link sending, and course migrationDeveloper: add verbose backup inspection with per-record summaries and grouped frame-trackpoint ranges
Developer: add
dbbackup list-prefixesto discover complete DynamoDB table prefixes and report course/user/movie counts with an aligned UTCfrom/todate rangeDeveloper: add
dbutil list-prefixes, show available prefixes whenDYNAMODB_TABLE_PREFIXis missing, and addmake show-local-varsfor direct local-debug commandsDeveloper: make
dbbackup list-prefixesofferaws sso loginand retry when AWS SSO token retrieval failsDeveloper: make
dbbackup backupreport progress to stderr and skip missing movie MP4 objects with manifest warnings instead of failing after writing a partial archiveDeveloper: make
dbbackup backuprefuse to overwrite an archive from a different DynamoDB table prefix and reuse already archived movie MP4 objects when refreshing a same-prefix backupDeveloper: make
dbbackup restorepreflight missing target table prefixes and create them only when--commitis suppliedDeveloper: make
dbbackup restoreexplicitly report that no restore was done when--commitis omittedDeveloper: make
dbbackup restoreuse archived movie-object buckets whenPLANTTRACER_S3_BUCKETis not configuredDeveloper: make
dbbackupreport backup, inspect, and restore S3 bucket choices and require confirmation before committed archive-bucket restoresDeveloper: parallelize
dbbackup restoretable creation, movie-object uploads, andmovie_frameswrites grouped by movie IDTest: 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 coverageDeveloper 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-adminandremove-admincommands
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