Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[Unreleased]
[0.15.3] - 2026-06-08
Added
- Space Utilization: account for committed work from other production schedules. The chart now overlays overlapping committed area from released schedules — once a schedule is released we are committed to producing its requests — shown washed out to distinguish it from the schedule under review's own load, and clipped to the weeks the schedule under review occupies. A selector lets you choose which other schedules contribute; it defaults to the released schedules that overlap.
Fixed
- Chart schedule selectors (Space Utilization and Yield Forecast) no longer blank the chart when changed rapidly, and the clear control no longer leaves a single schedule stuck in the selection.
[0.15.2] - 2026-06-08
Added
- Yield Forecast: account for committed work from other production schedules. The forecast now also includes overlapping production requests from released schedules — once a schedule is released we are committed to producing its requests — shown washed out to distinguish them from the schedule under review's own load (both the full-screen chart and the schedule-detail preview). A selector on the full-screen chart lets you choose which other schedules contribute; it defaults to the released schedules that overlap.
Fixed
- Yield Forecast chart no longer raises a JavaScript error in Dutch (an apostrophe in a translated label broke the inline script).
[0.15.1] - 2026-06-05
[0.15.0] - 2026-06-05
Added
- Schedule Tracking page: a "show from this week on" toggle (on by default) focuses the list on the current ISO week and later; switch it off to see all weeks. It is a tracking-only view option and does not affect the Overview.
Fixed
- Schedule Overview: the start-date filter now applies to the first (server-rendered) page of production requests; previously earlier weeks could still appear at the top until the list was scrolled.
- Infinite-scroll pagination no longer duplicates the active filter parameters in the loader request URL.
Changed
- Upgraded django-polymorphic 3.1.0 → 4.11.5, removing the
pkg_resourcesdeprecation warning emitted at startup.
[0.14.38] - 2026-06-04
Fixed
- The Release Checks CI workflow ran
make testinside the Docker image, butmake testprefixed its tools withuv run, which the image has nouvfor — so the "Run Django Tests" step failed on every tag (the v0.14.37 release build among them). The makefile's$(UVR)prefix is now empty inside the images (gated onBUILD_ENV, same as./djm), so containerizedmaketargets run the system tools directly. The makefile's ownrelease-checkstarget now runsmake test(not barepytest) so it exercises the same command CI does.
[0.14.37] - 2026-06-04
Fixed
./djmno longer depends onuv. It now runsmanage.pywith the dev host's uv-managed.venvwhen present, and otherwise with the system Python (CI and the staging/prod/local containers, selected via theBUILD_ENVenv var). This fixesmake release-checks, which failed at thecheck-translationsstep withexec: uv: not foundsince v0.14.35 because the containers have nouv.
[0.14.36] - 2026-06-03
[0.14.35] - 2026-06-03
Fixed
- Declare the
socialaccountallauth extra so the OIDC sign-in (v0.14.34) can actually start: theopenid_connectprovider imports PyJWT, which was present in local environments but not in the requirements, so a clean install (CI and the production image) failed at startup withModuleNotFoundError: No module named 'jwt'.django-allauth[mfa,socialaccount]pullspyjwt[crypto](andoauthlib/requests).
[0.14.34] - 2026-06-03
Added
- Single sign-on via Serra Vine (Authelia OIDC). When the deployment is configured with the Authelia OIDC provider, the login page presents a prominent "Sign in with Serra Vine" button; users are auto-provisioned on first sign-in (name and email from Authelia). The username/password form remains available as a break-glass fallback behind a toggle. Signing out also ends the Authelia SSO session. Local/dev installs without the provider keep the username/password login unchanged. (ADR 015)
[0.14.33] - 2026-05-14
Added
- Zulip communication thread on a production request now gets an automatic lead-in message when the first reply is posted to a previously empty topic. The lead-in shows the request name + sequence number (linked to the detail page), the schedule (linked to its detail page), the status, start/end ISO week labels, quantity, and area units at start — so readers in Zulip have immediate context and a click-through back to the request.
[0.14.32] - 2026-05-14
Added
Sortable column headers on the infinite-scroll list tables (schedules, articles, growing recipes, potted plants, operator weeks) now show a caret-up / caret-down icon when sorted, so the direction is visible at a glance. Previously only the schedule overview table had this affordance.
Bulk-delete confirmation pages with more than five production requests fold the items below the first five into a "N more — show all" collapsible (native
<details>), so the Delete and Cancel buttons stay near the top of the page regardless of selection size.Communication tab on released production requests, backed by a Zulip topic per request (topic name == sequence number). The tab shows the topic's message feed, an Open in Zulip link, and a reply form that posts via a bot account with the originating Django user's display name prefixed in bold so attribution is preserved. Forecast requests do not show the tab. Zulip outages render an inline warning instead of breaking the page. The Zulip channel name and id are configurable via
ZULIP_PRODUCTION_CHANNELandZULIP_PRODUCTION_CHANNEL_ID. See ADR-014.
Changed
The copy-schedule modal footer on the schedules list now follows the project convention: left-aligned, primary action first (
btn-primary), Cancel second (btn-outline-secondary). The previous layout used the Bootstrap default (right-aligned, solid secondary).Operation-outcome badges on the "Apply response times" results page (Success / Failed) now use the softer
bg-*-subtlevariants in line with the badge policy clarified in the style guide. Status badges throughout the app are now consistent in tone.Delete confirmation pages, chart pages, and the list-page search bar are now built on shared template foundations (
partials/_confirm_delete_base.html,partials/_chart_page_base.html,partials/list_search_form.html). Behaviour is unchanged; the consolidation reduces duplication and makes new pages of these kinds easier to add correctly.The in-app style guide (
/style-guide/) gained sections documenting the canonical implementations for: list pages with a model, filter patterns, delete confirmation pages, modal forms, chart pages, badge usage, and script inclusion ({% block javascript %}vs{% block inline_javascript %}).
[0.14.31] - 2026-05-12
Changed
Sync from Logiqs button on the schedule sidebar is now visible on every RELEASED schedule (not just the configured Logiqs inbox), and hidden on FORECAST schedules. Logiqs sync routes matched lots back to their own schedule, so the action is meaningful from any released schedule that mirrors Logiqs production.
make format-qualitynow delegates the Python/template formatting hooks topre-commit run --all-files. The makefile previously ranruff formatbeforeruff check --fix, while pre-commit runs them in the opposite order, which caused local format-quality and CI to produce different file contents on the same source — surfacing as a CI failure on the v0.14.30 release.make format-qualitynow produces the same output CI does.
[0.14.30] - 2026-05-11
Changed
- Schedule detail page split into two separate pages: the planning Overview at
/schedules/<pk>/and Tracking at/schedules/<pk>/tracking/. Both pages share a header, sidebar (with yield + utilization charts), filter dropdown, and week navigator. A two-link page-nav at the top of each page replaces the previous Bootstrap tab strip; filter state carries across the page-nav links so navigating between Overview and Tracking preserves any active filter. Tracking is now a bookmarkable URL in its own right.
Fixed
- Filter values applied via the sidebar filter dropdown are now mirrored into the browser URL, so the page-nav links between Overview and Tracking pick up the active filter on both pages.
[0.14.29] - 2026-05-08
[0.14.28] - 2026-05-08
Changed
- The operator week page now uses the same
django-tables2+django-filterstack as the other list pages. Every data column (Name, Production day, Article, Growing recipe, Benches) is sortable; click a column header to toggle. The period filter parameter renamed fromperiodtostart_rangeto match the schedule list page.
[0.14.27] - 2026-05-07
Added
- Error monitoring via self-hosted GlitchTip at
glitchtip.serraict.me. Unhandled exceptions
are captured automatically with environment, release, and request context. Two
GlitchTip projects are used:
Django Vinesfor production deployments (customer encoded inSENTRY_ENVIRONMENT, e.g.samada-production) andDjango Vines Developmentfor staging and opt-in local dev. See ADR-013 for the project-layout rationale and docs/deployment/error-monitoring.md for the operator runbook. - Superuser-only
/sentry-debug/endpoint that raisesZeroDivisionError, used to verify error capture from a live deployment.
Operator action required
To enable error monitoring on an existing deployment, set SENTRY_DSN and
SENTRY_ENVIRONMENT in the deployment env; without these, the app boots exactly
as before (Sentry init is skipped silently). For elest.io staging, the dashboard
env vars are now also forwarded by docker-compose.staging.yml — a redeploy
after this version is required.
[0.14.26] - 2026-05-06
Fixed
- Constrained scheduling solver now anchors
computedprecedence-constraint lag on the recipe (per-week resolvedGrowingPhaseSpecification, falling back to template defaults), separately from the request's currentSegmentRequirementdurations. Two regressions are addressed in one change:- On creation, requests no longer silently stretch a flexible phase to fill the gap between recipe per-week durations and template defaults (Yellow w22 / Potroos 1x — Wijdergezet was being stretched from 18 to 32 days). Production request 695 was the symptom that surfaced this.
- The "flexible phase absorbs hand edit" behavior is preserved: a hand edit to
one phase's duration does not move the lag, so the flexible phase still
absorbs the change instead of pushing delivery later. This behavior was
inadvertently broken in v0.14.25 (six BDD scenarios in
scheduling_constraints.featureandreschedule_from_phase_adjustment.feature).
[0.14.25] - 2026-05-06
Fixed (incomplete — superseded by [Unreleased])
- First attempt at the solver-lag fix anchored the
computedlag on the request's currentSegmentRequirementdurations. This fixed the Yellow w22 stretching at creation but regressed the flexible-phase-absorbs feature on hand edits. Use the next release.
[0.14.24] - 2026-05-06
Fixed
- Schedule overview / tracking row inline edits no longer wipe the entire table
tbody. The row
<tr>s inheritedhx-target="#schedule-detail-request-tbody"from the surrounding container, so the per-row refresh after aproduction-request-field-changedevent swapped the new row into the whole tbody (replacing it). Added explicithx-target="this"on row templates to break the inheritance.
[0.14.23] - 2026-05-06
Fixed
- Inline reschedule on production requests whose recipe shares growing phases with another recipe (the normal case after a Logiqs sync) no longer fails. The rescheduling service now resolves the recipe from the production request itself instead of walking up from a shared child phase.
[0.14.22] - 2026-05-06
Fixed
- Inline reschedule failures (clicking ±1d or set date on a production request
or growing-phase row) now show a clear error message in the UI instead of
failing silently. Previously a
KeyError/RuntimeErrorfrom the rescheduling service produced a 500 with no user feedback. Underlying recipe-resolution bug fix follows in a separate release.
[0.14.21] - 2026-05-06
[0.14.20] - 2026-05-04
Fixed
- Production container starts on servers without AVX/AVX2/FMA/BMI CPU features.
Replaced
dremio-simple-querywith a small in-repo Dremio Flight client, which dropspolars(the package whose default wheel crashed withIllegal instructionon older CPUs) andduckdbfrom the dependency tree.
[0.14.19] - 2026-04-23
Fixed
- Segment requirements tab on production request detail page now refreshes after editing a phase date, showing cascading date changes
- Date edit widget returns to view mode after saving (was stuck in edit mode)
Added
- Search, sortable columns, and infinite scroll on schedules, growing recipes, and potted plants list pages using django-tables2 and django-filter
- Date range filter on schedules list using flatpickr
BaseFilteredTableViewbase class for filtered table views- Recipe links in articles table
- HTMX event coordination patterns documented in django-conventions skill
- Italic styling for root segment requirement rows
[0.14.18] - 2026-04-22
Added
- Potted plant detail page: duration and offset columns in Structure tab, total duration footer, and Dependencies section showing precedence constraints
[0.14.17] - 2026-04-22
Fixed
- Calendar date picker on schedule overview: naive datetime from flatpickr caused TypeError in rescheduling service when mixed with timezone-aware DB values
- Missing areaunitdecimals in overview-row context, causing error after quantity edits on schedule detail page
Changed
- Extract shared
parse_aware_datetime()helper for consistent timezone-aware datetime parsing in views
[0.14.16] - 2026-04-21
Added
- Inline date editing for growing phase requirements on production request detail page and schedule tracking page (±1d buttons and calendar picker)
- Rescheduling from individual growing phase: changing a phase start or end date reschedules the entire production request respecting precedence constraints
- Phases with actuals (segment responses) are not editable
- Constraint-based scheduling using OR-Tools CP-SAT solver, replacing sequential forward scheduling
- Precedence constraints (FS/SS/FF/SF) with computed or explicit lag, configured per potted plant type
- Duration offsets on growing phases: min/max bounds relative to specification duration, allowing the solver to adjust flexible phases
- Proportional lag adjustment for constraints where a phase duration influences the lag (e.g. lily cooling ratio)
- Admin guide documentation for scheduling constraints
- ADR-012: deployment is a customer concern (with reference deploy flow)
- Segment relations inline and filtered phase selectors on potted plant admin page
Changed
- Solver objective changed from minimize makespan to minimize deviation from nominal durations, preventing phases from shrinking to zero when all are flexible
Fixed
- Production request creation now uses solver-computed durations instead of recipe durations, fixing FS chain violations when precedence constraints are active
[0.14.15] - 2026-04-19
[0.14.14] - 2026-04-19
Changed
- Logiqs sync supports incremental filtering via
--sincedate parameter - UI-triggered sync defaults to last week instead of fetching all data
- Dremio fetch functions refactored to use shared connection helper
[0.14.13] - 2026-04-19
Added
- Show production request code in details card on production request detail page
- New Responses tab on production request detail page showing segment responses (start date, end date, plant count, area)
- Add
areafield to SegmentResponse model, synced from Dremio - Dutch translations use "realisatie" / "gerealiseerd" for response terminology
[0.14.12] - 2026-04-19
Added
- Reschedule planned segment requirements when actual phase dates differ from plan — adjusts subsequent phases forward and previous phase end to match actuals, including partial lot move overlap
[0.14.11] - 2026-04-18
[0.14.10] - 2026-04-18
Added
- Sync from Logiqs button on schedule tracking tab (inbox schedule only) — triggers background sync via django-tasks, shows result with counts and clickable schedule links
- Sync Articles and Sync Phases buttons on settings page (staff only)
- Background task infrastructure: django-tasks + django-tasks-db with database backend and db_worker docker compose service
- Run history visible in admin via DBTaskResult
- BDD scenarios for Logiqs imports and affected schedules reporting
- Extracted article and phase import logic from management commands into reusable service functions (logiqs_import.py)
- Management command
--enqueueflag for scheduled execution via deployment tooling (ADR-011: scheduling is a deployment concern)
Changed
- Organized feature specs into narrative directories (10configure, 20plan, 30operate, 40track, 50crosscutting) with a README index
- Restructured docs outline: architecture first, single toctree, no duplicated headers
- Published ADR-008 (monolith), ADR-009 (HTMX), ADR-010 (BDD); replaced trade-offs doc with proper ADRs
- Added production execution vine documentation
- Updated terminology: use specific requirement subtypes (potted plant requirement, growing phase requirement) where context is unambiguous
- Updated i18n glossary with product segment subtypes
Fixed
- Fixed staging Docker build: handle empty DATABASE_URL in SQLite check
- Fixed staging Docker build: make behave_django optional in test settings
[0.14.9] - 2026-04-17
[0.14.8] - 2026-04-17
[0.14.7] - 2026-04-17
Fixed
- Fixed SQLite test DB:
yield_forecast_viewno longer blocks migrations. SetPRAGMA legacy_alter_table = ONfor SQLite connections instead of per-migration view drop/recreate wrappers.
Changed
- Standardized all continuous tests (pytest + BDD specs) on SQLite for speed.
Added
make specs-pgfor on-demand PostgreSQL verification before releases. See ADR 007 for the test database strategy decision.
[0.14.6] - 2026-04-17
Changed
- Upgraded Django from 5.1.11 to 5.2.13 (LTS, supported through April 2028).
Drops the
pyup: < 5.2pin. No code changes required — full test and spec suites pass unchanged. See ADR 006 for the LTS-tracking decision. django-upgradetarget version bumped from 5.0 to 5.2 inmake format.
[0.14.5] - 2026-04-16
Changed
- Custom Postgres image bumped from
postgres:15topostgres:16. Local dev and staging environments require a one-time data migration viascripts/db.sh backup+ restore; seedocs/deployment/staging.mdfor the runbook. Samada (serra vine) was already on postgres 16, no migration required. - Serra vine deploys now use the custom Postgres image (published alongside the
Django image in the Gitea registry), so
scripts/db.sh backup/restoreworks there too. Previously unavailable on stockpostgres:16.
Removed
- Unused cookiecutter-inherited production deployment config:
docker-compose.production.yml,compose/production/traefik/, andcompose/production/nginx/. We deploy viadocker-compose.serravine.yml, which uses the serra vine-provided traefik. - Dependabot no longer watches the removed directories, nor the nonexistent
compose/local/node/andcompose/production/aws/paths.
[0.14.4] - 2026-04-15
[0.14.3] - 2026-04-15
[0.14.2] - 2026-04-14
[0.14.1] - 2026-04-14
Changed
- BDD scenarios now use realistic seed data from two nursery types: potted lilies (T. Bee, T. Comfort, After Eight) and potted roses (Naranja, Pink, Red). Phase names are consistent and match domain terminology.
- Added context documentation describing both example growing recipes with potted plant product segments.
[0.14.0] - 2026-04-13
Added
Bulk "Move to schedule" action: select production requests and move them to another schedule via a modal with Select2 dropdown. Success message links to the target schedule.
Logiqs sync command (
./djm sync_from_logiqs) pulls active lots from Dremio into Vines as production requests and responsesProductionResponsemodel (IEC-62264 execution facts, linked to requests via FK with SET_NULL)ProductionRequest.codefield for Logiqs lot code matchingPlanningConfig.logiqs_inbox_schedulesetting for unmatched lot placement- Started marker on tracking tab: lots with actual start times show a play icon and use the actual start for week grouping
- Unresolvable lots (unknown product definition) are reported without crashing the sync
- External system
codefield onProductSegment(inline-editable in admin) Codecolumn on list views for growing recipes, articles, potted plants, and on the potted plant detail tabs (structure + recipes)- CSS view transitions for smooth cross-fade on page navigations (progressive enhancement)
- Completed marker on tracking tab: lots with
state=COMPLETEDshow a check icon SegmentResponsemodel for per-phase execution data (IEC-62264 segment responses linked to phase requirements)- Segment-level sync:
./djm sync_from_logiqsnow pulls per-phase responses from Dremioproduction_segment_responsesview - Tracking tab phase cells show actual start time (with indicator) when a segment response exists
- Lot-based sync: production responses are now derived from the Logiqs lots table (not plantgroup summaries), so all lots are visible — including planned-not-started and completed lots without active phase records
- Sync-created requests use the planned quantity from the Logiqs lot data instead of the default (1000)
Fixed
- Dremio
production_responsesview:NULLIF(..., '')on date aggregates so empty strings are treated as NULL andstateis computed correctly - Sync-created production requests now include growing phase requirements from their recipe (same as UI-created requests)
_as_awarehandles pandasTimestampandNaTvalues from Dremio- Lot start date now comes from the lot record (potting date), not from the earliest phase summary — fixes wrong start dates when early phase records are missing
Changed
ProductDefinition.codelabel and help text are now translatable
[0.13.35] - 2026-04-08
Added
- Duplicate growing recipes from action menu (list and detail page), copying name, potted plant product link, and growing phase specifications with durations
[0.13.34] - 2026-04-08
Added
- Consistent color scale for growing phases across charts and tables
- Configurable color palette (ECharts, D3 Category10, Google Charts, D3 Category20) on the settings page
- Growing phase colors auto-assigned from active palette
- Utilization chart uses growing phase colors instead of hardcoded positional colors
- Tracking table shows growing phase colors as column header and washed-out cell backgrounds
[0.13.33] - 2026-04-07
Added
- Serra Vine deployment support: settings module, example compose file, and Gitea Actions workflow for building and pushing Docker images
[0.13.32] - 2026-03-30
[0.13.31] - 2026-03-30
[0.13.30] - 2026-03-30
[0.13.29] - 2026-03-30
Added
- ADR-004: Shared recipe templates for product definitions
- Recipe detail page with duration grid (growing phase specifications)
- Management command
consolidate_potted_plantsfor cleaning up orphan segments - Migration guide for shared recipe templates upgrade
Changed
- Growing phase specifications now belong to the recipe (ProductDefinition), not the potted plant (PottedPlantSegment)
- ProductDefinition uses a direct FK to PottedPlantSegment (replacing M2M)
- Multiple recipes can now share the same potted plant template
- Cultivar and pot_size moved from PottedPlantSegment to Article
- Duration grid UI moved from potted plant page to recipe detail page
[0.13.28] - 2026-03-23
Added
- ADR-003: Document Django ORM architecture consequences and mitigation patterns
Changed
- Fix N+1 queries in forecast requests and bulk delete confirmation views
- Optimize bulk delete: skip auditlog for segment requirements (derived data), reducing queries from 166 to 71 for 20 requests
[0.13.27] - 2026-03-23
Changed
- Use django-sequences for production request sequence numbers to guarantee monotonic assignment — numbers are never reused after deletion, which is critical for Logiqs integration where sequence numbers are external references.
[0.13.26] - 2026-03-21
Changed
- Optimize batch creation of production requests: memoize segment tree and duration lookups, skip auditlog for derived segment requirements, pass description at creation to avoid post-creation updates. Copy-to-weeks (8×25=200 requests) reduced from ~11s to ~2s on PostgreSQL.
[0.13.25] - 2026-03-21
Fixed
- Editing a production request no longer clears the growing recipe
Changed
ProductionRequest.product_definitionandSegmentRequirement.product_segmentare now NOT NULL with PROTECT (prevents orphaned records)GrowingPhaseDuration.growing_phaseandGrowingPhaseSpecification.potted_plant_segmentnow use PROTECT instead of CASCADE (prevents silent config loss on deletion)
[0.13.24] - 2026-03-20
Added
- Audit logging for all models using django-auditlog (tracks who changed what and when)
- Correlation ID per request so related audit entries (e.g. cascade deletes) can be traced together
- ADR-001 documenting the audit logging design decision
- History button in action menus (staff-only) linking to audit log for each model instance
Changed
- Refactored
reorder_children()to use.save()instead ofQuerySet.update()so phase reordering is audited
[0.13.23] - 2026-03-20
Changed
- Production request growing recipe is now read-only after creation (prevents inconsistent segment requirements)
- Changing start date via edit form now properly reschedules segment requirements
[0.13.22] - 2026-03-19
Changed
- Copy-to-weeks now uses flexible week pattern input instead of fixed number of consecutive weeks (Actie #69)
[0.13.21] - 2026-03-19
Changed
- Potted plant detail: remove growing recipes tab and duration column from structure tab (Actie #76)
[0.13.20] - 2026-03-19
Changed
- Hide articles and growing recipes from navigation for non-admin users (Actie #75)
[0.13.19] - 2026-03-19
Changed
- Simplify production request creation: selecting a growing recipe now auto-fills the potted plant product. Removed the article field and its cascade from the create form (Actie #74)
[0.13.18] - 2026-03-18
Changed
- Refactor schedule detail template: extract partials and static JS files for clarity and maintainability (1060 → 226 lines)
Fixed
- Copy schedule modal submit button now disables after first click, preventing duplicate copies
[0.13.17] - 2026-03-17
Changed
- Schedule overview and tracking: show potted plant name instead of production request name, with request name in tooltip and link to details
[0.13.16] - 2026-03-17
Added
- Apply response times to all forecast requests in a schedule via the schedule action menu, with streaming progress indicator
- Apply response times to selected forecast requests via the bulk actions bar
[0.13.15] - 2026-03-17
[0.13.14] - 2026-03-17
[0.13.13] - 2026-03-16
Added
- "Copy durations to..." action on potted plants: copy the week-dependent duration grid from one potted plant to one or more others, replacing existing specifications on the targets. Supports partial copy when growing phases differ. Uses Select2 for user-friendly target selection.
Removed
- "Copy to recipes" action on potted plants and growing recipes (replaced by the simpler "Copy durations to..." action).
[0.13.12] - 2026-03-16
Changed
- Replace numeric "repeat weeks" field with print-dialog-style week pattern
input: supports count (
3x), ranges (5-10), lists (7,9,13), and combined patterns (5-10, 13, 15). Ranges wrap around year boundaries and clip to start week.
[0.13.11] - 2026-03-16
Fixed
- Week separator on overview shown incorrectly for weeks 1-9 due to format mismatch between Python and Django template filter
Changed
- Unified week separator logic across overview and production request pages:
computed in Python instead of template
ifchangedtags, matching the tracking page pattern. Also adds pagination boundary handling to the production request list (previously missing).
[0.13.10] - 2026-03-16
[0.13.9] - 2026-03-13
[0.13.8] - 2026-03-13
[0.13.7] - 2026-03-13
[0.13.6] - 2026-03-13
[0.13.5] - 2026-03-13
[0.13.4] - 2026-03-13
[0.13.3] - 2026-03-13
[0.13.2] - 2026-03-13
[0.13.1] - 2026-03-12
[0.13.0] - 2026-03-06
Added
- Logiqs API integration: starting a production request now creates an article and lot in the Logiqs InventoryService via OAuth2-authenticated API calls
- Operator sees error feedback when Logiqs is unavailable (local start still proceeds)
Fixed
- Start date on production request start page now always renders in ISO format
(
YYYY-MM-DD), fixing flatpickr parse failures under non-English locales
[0.12.2] - 2026-03-06
Fixed
- Add missing migration for Meta.ordering pk tiebreaker (caused Release Checks CI failure)
- Add
check-migrationstarget tocheck-qualityand quality monitor to catch missing migrations locally
[0.12.1] - 2026-03-06
Fixed
- Split production requests now preserve parent-child segment requirement hierarchy (was broken on PostgreSQL due to NULLs-last ordering)
[0.12.0] - 2026-03-05
Added
- New Execution section for operators at the potting station
- Operator can view released production requests for the current week (with period filter)
- Operator can start a production request (full or partial quantity), with editable start date
- Personas documentation (Planner and Operator roles)
Fixed
- Unstable model ordering caused missing/duplicate rows in paginated views
[0.11.1] - 2026-03-05
Added
- Admin links in model action menus, visible only to staff users
- Registered ProductionRequest and ProductionSchedule in Django admin
Fixed
- Renamed
requesttemplate variable toproduction_requestto prevent shadowing Django's HTTP request context
[0.11.0] - 2026-03-04
Added
- Split production requests into two with configurable quantity
- Supports both plant quantity and area units input modes
- Available on any production request from the action menu
[0.10.24] - 2026-03-04
Changed
- Switch to full-width layout for better use of wide monitors
[0.10.23] - 2026-03-04
[0.10.22] - 2026-03-03
[0.10.21] - 2026-03-03
Added
- Release individual production requests within a released schedule
- Sequence number: globally unique business identifier assigned on release
- Bulk release action to release multiple production requests at once
- Status icon and sequence number shown on schedule detail and request detail
- Schedule revert blocked when any production requests are released
[0.10.20] - 2026-03-02
Added
- Release and revert production schedules (FORECAST / RELEASED state)
- Schedule status shown with icons on list and detail pages
[0.10.19] - 2026-03-02
[0.10.18] - 2026-02-27
Added
- Copy potted plant product to other growing recipes (reference or duplicate) from potted plant action menu and growing recipe action menu
- Remove potted plant product from a growing recipe inline via HTMX
[0.10.17] - 2026-02-27
[0.10.16] - 2026-02-27
[0.10.15] - 2026-02-27
- Rename "Articles" / "Product Definition" to "Growing Recipe" / "Teeltrecept" across UI, forms, translations, and BDD specs
- Fix missing Edit button on empty growing phase specifications page
- New specification rows now copy durations and week range from last row
[0.10.14] - 2026-02-26
[0.10.13] - 2026-02-26
- Fix tracking tab not refreshing when adding a production request via modal
[0.10.12] - 2026-02-26
- Fix inline quantity editor clipped behind left table border on tracking tab
[0.10.11] - 2026-02-26
- Fix tracking tab growing phase columns appearing in wrong order when schedule has multiple product definitions
[0.10.10] - 2026-02-26
- Comprehensive review and fix of wording, screen layouts, and UI consistency
- Rewrite style guide with principles-first approach (Obvious, Minimal, Consistent, Multilingual)
- Extract cardemptystate component for card-level empty states
- Replace hand-coded dropdowns with model_actions template tag
- Fix shared components to match style guide (button colors, inline styles)
- Add per-row HTMX refresh to overview tab (matching tracking tab behavior)
- Fix tab persistence on page refresh via URL hash
- Fix calendar date picker breaking table structure on inline edits
- Document inline editing pattern in style guide
[0.10.9] - 2026-02-24
[0.10.8] - 2026-02-24
[0.10.7] - 2026-02-24
- Bundle all CDN dependencies (jQuery, HTMX, Bootstrap Icons, ECharts) as static files for offline use
- Standardize ECharts version across all templates
- Add VENDORS.md documenting all vendored libraries with versions and source URLs
[0.10.6] - 2026-02-24
- Replace django-select2 with client-side Select2 for form dropdowns
- Bundle Select2 CSS and JS as static files instead of CDN
[0.10.5] - 2026-02-23
- Add
/ui-reviewskill for UI consistency guidance - Publish style guide as in-app page at
/style-guide/with live reference links - Link style guide from About page under Resources section
- Review and expand style guide with missing patterns (sticky tabs, breadcrumbs, week navigator, bulk actions bar, detail page headers)
- Fix UI inconsistencies: hardcoded colors, button classes, breadcrumb spacing, action column widths, link styles across all pages
- Detail pages use compact three-dots dropdown for actions instead of prominent buttons
- Schedule detail: sticky sidebar, reordered columns (name, qty, dates), removed card header from production requests list
- Tracking table: subtle phase column separators
- Breadcrumb links no longer show underline
[0.10.4] - 2026-02-22
[0.10.3] - 2026-02-21
- Compact quantity display: show only primary number with tooltip for full details
- Configurable quantity unit label in Planning Configuration
- Column headers show area unit or quantity unit based on input mode
[0.10.2] - 2026-02-20
- Show yield and utilization chart sidebar on both overview and tracking tabs
[0.10.1] - 2026-02-20
- Compact tracking screen: single-row header, table-sm, Qty column
- Inline editing for start week and quantity on tracking page
- Full row refresh after inline edits (only edited row, via HTMX event filtering)
- Add production request button on tracking tab (navigates back to tracking)
- Short date format (W15-1) and short week separators (25W15) on both pages
- Fix missing phase data on tracking page (pagination queryset bug)
- Fix duplicate week separators at pagination boundaries on overview page
[0.10.0] - 2026-02-19
Added
- Copy a potted plant from the list page action menu, duplicating growing phase relations and duration specifications
- Expand icon on yield overview sidebar chart to open full-screen chart view
- Configurable decimal places for area unit display (PlanningConfig setting, default 0 for whole numbers)
[0.9.3] - 2026-02-19
Fixed
- Empty state on potted plant grid now guides users to the Edit button instead of incorrectly directing them to the admin page
[0.9.2] - 2026-02-18
[0.9.1] - 2026-02-18
Added
- Production size can be entered as area units instead of plant quantity, controlled by a config setting
- Area units and plant quantity are shown alongside each other (one editable, one derived)
- Create, edit, and inline edit forms all support area units input mode
[0.9.0] - 2026-02-18
Added
- Area units are now configurable
[0.8.5] - 2026-02-18
[0.8.4] - 2026-02-17
[0.8.3] - 2026-02-17
Added
- Auto-refresh sidebar yield and utilization charts when production requests are edited inline on the schedule detail page
[0.8.2] - 2026-02-17
Added
- Configurable capacity thresholds on greenhouse utilization charts
- PlanningConfig singleton with CapacityThreshold entries (value + hex color)
- Both charts show horizontal dashed lines at each threshold
- Bars colored by highest exceeded threshold
- Expand icon on sidebar mini-chart linking to full-page chart
- Config menu page to view thresholds with link to Django admin
- Default thresholds seeded with Serra Vine theme colors
[0.8.1] - 2026-02-17
Added
- Tracking tab on schedule detail page showing production requests with per-growing-phase columns (start week + area)
- Actions menu on each tracking row for quick access to edit, duplicate, delete
- Lazy-loaded tab content via HTMX (loads only when tab is activated)
[0.8.0] - 2026-02-15
[0.7.19] - 2026-02-15
Added
- Auto-publish BDD feature files as documentation on the Sphinx docs site using sphinx-gherkindoc
[0.7.18] - 2026-02-15
Changed
- Hardened input validation:
@login_requiredonget_product_segmentsAJAX view, try/except forshift_weeksin schedule copy,CheckConstraintto prevent self-referencing product segment relations - Extracted shared
table_loaderandempty_statetemplate components to reduce duplication across list pages
[0.7.17] - 2026-02-13
Added
- CHANGELOG.md following keepachangelog format, with backfilled entries for 0.7.10–0.7.15
- Changelog page at /changelog/, linked from version number on about page
make releaseautomatically moves [Unreleased] entries to versioned heading via bump-my-version- "Update CHANGELOG.md" added to Definition of Done
/verify-doneskill updated with changelog check step
[0.7.16] - 2026-02-13
[0.7.15] - 2026-02-13
Changed
- Improve exploratory test report titles and docs index ordering
[0.7.14] - 2026-02-13
Changed
- Split views.py into views/ package (base, schedule, production_request, reporting, product) for maintainability
- Add docstrings to complex model methods (getweeklydistribution, getweeklyoverview)
- Add djlint template formatting to
make format
Fixed
- Fix djlint formatting in productdefinition rows template
[0.7.13] - 2026-02-12
Fixed
- Fix pre-commit issues: template formatting and test header style
[0.7.12] - 2026-02-12
Added
- Articles (product definitions) list page with HTMX lazy loading
- Three-dots action menu with admin link on article rows
- BDD scenarios for articles list page
- Config dropdown in navigation (replaces Potted Plants link)
- Dutch and Polish translations for articles-related strings
[0.7.11] - 2026-02-12
Added
- Publish exploratory test reports on Sphinx docs site
[0.7.10] - 2026-02-12
Added
- Docs site as development tool: test reports, version info, git commit hash
- Move docs service into local docker compose
[0.6.0] - [0.7.9]
Initial development: production scheduling, growing phase specifications, potted plant management, yield forecasting, greenhouse utilization reporting, HTMX inline editing, schedule copy, bulk operations, rescheduling.