Skip to content

Conversation

@Tim020
Copy link
Contributor

@Tim020 Tim020 commented Jan 29, 2026

No description provided.

Tim020 and others added 6 commits January 26, 2026 19:51
Add `from __future__ import annotations` to settings.py and
base_controller.py to enable proper deferred evaluation of
type annotations. This is required when using TYPE_CHECKING
imports to avoid runtime NameError when the imported types
are used in function signatures.

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Adds functionality for the server to check whether it is running the
latest version of DigiScript, displayed in System Config -> System tab.

Backend:
- New VersionChecker service that queries GitHub Releases API
- Checks on startup and periodically (every hour)
- Caches results for fast API responses
- New /api/v1/version/status and /api/v1/version/check endpoints

Frontend:
- Version row in System Config showing current version with status badge
- Green "Up to date", yellow "Update Available", red "Unable to check"
- "Check Now" button for manual refresh
- Link to release notes when update is available

Also fixes circular import issues by adding `from __future__ import
annotations` to settings.py and base_controller.py.

Closes #878

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
…annotations (#882)

Add PEP 563 deferred annotation evaluation to all files that use
TYPE_CHECKING or string-quoted forward references, then remove the
now-unnecessary string quotes from Mapped[] type annotations and
function parameter/return type annotations.

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
@Tim020 Tim020 added the release Pull requests for creating a new release label Jan 29, 2026
@github-actions github-actions bot added documentation Improvements or additions to documentation client Pull requests changing front end code server Pull requests changing back end code xlarge-diff labels Jan 29, 2026
@github-actions
Copy link

github-actions bot commented Jan 29, 2026

Client Test Results

99 tests   99 ✅  0s ⏱️
 4 suites   0 💤
 1 files     0 ❌

Results for commit 697f892.

♻️ This comment has been updated with latest results.

@github-actions
Copy link

github-actions bot commented Jan 29, 2026

Python Test Results

  1 files    1 suites   51s ⏱️
506 tests 506 ✅ 0 💤 0 ❌
511 runs  511 ✅ 0 💤 0 ❌

Results for commit 697f892.

♻️ This comment has been updated with latest results.

dependabot bot and others added 8 commits January 29, 2026 12:06
Bumps [alembic](https://github.com/sqlalchemy/alembic) from 1.18.1 to 1.18.2.
- [Release notes](https://github.com/sqlalchemy/alembic/releases)
- [Changelog](https://github.com/sqlalchemy/alembic/blob/main/CHANGES)
- [Commits](https://github.com/sqlalchemy/alembic/commits)

---
updated-dependencies:
- dependency-name: alembic
  dependency-version: 1.18.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…ching (#890)

Converts sequential await chains to parallel Promise.all calls in 10 Vue
components, significantly improving page load times by running independent
API calls concurrently.

High priority refactors (largest impact):
- ScriptEditor.vue: 14 sequential awaits → parallel groups
- CueEditor.vue: 13 sequential awaits → parallel groups
- ConfigMics.vue: 6 sequential awaits → single Promise.all

Medium priority refactors:
- ConfigSystem.vue: 4 parallel fetches
- ConfigCharacters.vue: 2 parallel fetches
- CharacterGroups.vue: 2 parallel fetches
- PropsList.vue: 2 parallel fetches
- SceneryList.vue: 2 parallel fetches

Additional optimizations:
- App.vue: Parallelize RBAC roles with WebSocket state check; parallelize
  user RBAC and settings after user fetch
- ShowLiveView.vue: Parallelize session data and act list fetches

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
* Fix duplicate HTML IDs across Vue modal components

Resolves SonarQube reliability issues by ensuring unique HTML IDs in
components with both 'add' and 'edit' modals. Each form element now uses
context-specific prefixes (new-/edit-) to prevent accessibility issues
and JavaScript selector conflicts.

Also adds explanatory comment to intentionally empty catch block in
ServerSelector.vue URL validator.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Fix duplicate HTML IDs in SceneryList.vue

Add unique prefixes to form element IDs in the new-scenery-type,
edit-scenery-type, new-scenery, and edit-scenery modals.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
* Reduce code duplication to pass SonarQube quality gate

Centralize duplicated error messages and form validation code to reduce
duplication from 4.87% to below the 3% threshold.

Backend changes:
- Add controllers/api/constants.py with 40+ standardized error messages
- Update 17 controller files to use shared constants
- Update 2 test files with improved error message format

Frontend changes:
- Add mixins/formValidationMixin.js with reusable validation methods
- Update 9 Vue components to use the shared mixin

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Fix Python formatting in tags.py

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Reduce duplication in stage direction style validation

Extract common validation logic into validate_style_fields() helper
function to reduce code duplication between post() and patch() methods.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Reduce code duplication in stage and override controllers

Extract common patterns to reduce SonarQube duplication metrics:

- Create helpers.py with shared allocation CRUD logic for props/scenery
- Extract handle_override_patch/delete helpers in overrides.py
- Update props.py and scenery.py to use shared helpers

Net reduction of ~247 lines while preserving all functionality.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Extract type controller CRUD helpers to reduce duplication

Add handle_type_post, handle_type_patch, handle_type_delete helpers
and update PropsTypesController and SceneryTypesController to use them.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Simplify form validation mixin API

Remove validateNewState and validateEditState convenience wrappers.
Components now call getValidationState directly with the form state key.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Bumps [alembic](https://github.com/sqlalchemy/alembic) from 1.18.2 to 1.18.3.
- [Release notes](https://github.com/sqlalchemy/alembic/releases)
- [Changelog](https://github.com/sqlalchemy/alembic/blob/main/CHANGES)
- [Commits](https://github.com/sqlalchemy/alembic/commits)

---
updated-dependencies:
- dependency-name: alembic
  dependency-version: 1.18.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* Add plans directory to ignore file

* Add scene change plan modal

* Add stage timeline tab

* Fix SonarQube quality gate issues in StageTimeline

- Consolidate generateBarsForProp and generateBarsForScenery into single
  generateBarsForItem method to reduce code duplication (5.2% -> under 3%)
- Add formatSceneRange helper to fix "unexpected negated condition" issues
- Reduces bundle size slightly due to code consolidation

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Reduce code duplication by extracting shared timeline styles

Extract ~110 lines of duplicate CSS from MicTimeline.vue and StageTimeline.vue
into a shared timeline.scss stylesheet. Both components now import this shared
stylesheet using @use, eliminating the duplication flagged by SonarQube.

Changes:
- Create client/src/assets/styles/timeline.scss with shared styles
- Update MicTimeline.vue to use shared .timeline-container and .timeline-svg
  classes instead of component-specific names
- Update StageTimeline.vue similarly
- Reduce duplicated lines from 51 (5.35%) to well below the 3% threshold

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Refactor applyExportStyles to eliminate code duplication

Replace repetitive querySelectorAll/forEach/setAttribute blocks with a
data-driven approach using a styles configuration object. This reduces
the duplicated lines flagged by SonarQube in the mixin.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
@github-actions github-actions bot added the git label Feb 1, 2026
Tim020 and others added 2 commits February 2, 2026 19:22
This adds comprehensive user documentation for the new stage management
features including crew, props, scenery, allocations, timeline, and
the live Stage Manager pane.

New documentation:
- docs/pages/show_config/stage_management.md - Full guide for Staging tab
- Updated show_config.md to link to stage management docs
- Updated live_show.md with Stage Manager Pane section

Screenshots added:
- Crew tab (empty and with data)
- Scenery tab (empty and with data)
- Props tab (empty and with data)
- Stage Manager allocations view
- Stage Timeline view
- Live Stage Manager pane

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Bumps [pyjwt[crypto]](https://github.com/jpadilla/pyjwt) from 2.10.1 to 2.11.0.
- [Release notes](https://github.com/jpadilla/pyjwt/releases)
- [Changelog](https://github.com/jpadilla/pyjwt/blob/master/CHANGELOG.rst)
- [Commits](jpadilla/pyjwt@2.10.1...2.11.0)

---
updated-dependencies:
- dependency-name: pyjwt[crypto]
  dependency-version: 2.11.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* Add crew assignment backend for stage management (Phase 1)

Implement backend support for assigning crew members to SET/STRIKE
operations on props and scenery items:

- Add CrewAssignment model with two-FK pattern (prop_id XOR scenery_id)
  enforced by CHECK constraint, with CASCADE deletes on all FKs
- Add block computation utilities to determine valid SET/STRIKE boundaries
  from consecutive scene allocations (blocks never span act boundaries)
- Add full CRUD API at /api/v1/show/stage/crew/assignments with boundary
  validation ensuring assignments only go on valid block boundaries
- Integrate orphan detection: when allocations change and invalidate
  block boundaries, crew assignments are automatically deleted
- Add comprehensive unit tests (59 tests) covering block computation,
  boundary validation, orphan detection, API endpoints, and CASCADE behavior

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Fix module discovery prefix collision filtering out crew.py controller

find_end_modules() used startswith(module) to detect parent packages,
which incorrectly treated "crew" as a parent of "crew_assignments"
since the string prefix matched. Appending "." ensures only actual
sub-package relationships (e.g., crew.something) trigger the filter.

Also regenerates preload_modules.py with all current controller and
model modules (was stale, missing 16 modules).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Add crew assignment timeline side panel (Phase 2)

Adds interactive side panel to the stage timeline for managing crew
assignments on allocation blocks. Clicking a prop/scenery bar opens
the panel showing SET and STRIKE boundaries with crew assignment
controls. Includes loading state to prevent double-clicks, conflict
detection across concurrent assignments, and dark-mode-compatible
styling.

Also fixes pre-existing scenery controller bugs: wrong error constant
(ERROR_CAST_MEMBER_NOT_FOUND -> ERROR_SCENERY_NOT_FOUND) and malformed
error message for invalid scenery type IDs.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Add crew assignment UI to Stage Manager (Phase 3)

Introduce SET/STRIKE collapsible cards showing items entering or leaving
each scene with per-item crew assignment dropdowns. Refactor existing
allocations tables into a collapsible section. Fix timeline mixin to
break grouped segments at act boundaries.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Add crew timeline visualization with conflict detection (Phase 4)

Adds a read-only CrewTimeline component as a lazy sub-tab under
Timeline, showing crew workload across scenes with stacked bars
colored by prop/scenery item. Detects hard conflicts (multiple
distinct items in one scene) and soft conflicts (differing item
sets across adjacent scenes within an act).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Add crew names to Plan modal and orphan warning dialogs (Phase 5)

Display assigned crew member names beneath Setting/Striking items in the
live show Plan modal. Add warning dialogs that list affected crew
assignments before allocation changes that shift block boundaries.
Extract block computation and orphan detection into a tested frontend
utility mirroring the backend logic.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Add documentation for crew assignment UI features (Phase 6)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Fix ruff import sorting in CrewAssignment migration

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Reduce test code duplication with shared stage fixtures

Extract repeated setUp fixture code (Show/Act/Scene/Prop/Scenery/Crew/User
creation) from test_block_computation.py and test_crew_assignments.py into
shared helpers in test/helpers/stage_fixtures.py. This eliminates ~460 lines
of duplication to resolve failing SonarCloud quality gate checks.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Fix ruff formatting in block_computation.py

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Fix error message field mismatch in crew assignment actions

The add action was reading `errorData.error` instead of
`errorData.message`, causing server error messages to be silently
dropped in favor of the generic fallback. The delete action was not
reading the response body at all, always showing a hardcoded message.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
@github-actions github-actions bot removed documentation Improvements or additions to documentation client Pull requests changing front end code server Pull requests changing back end code git labels Feb 11, 2026
Tim020 and others added 3 commits February 11, 2026 12:24
Bumps [alembic](https://github.com/sqlalchemy/alembic) from 1.18.3 to 1.18.4.
- [Release notes](https://github.com/sqlalchemy/alembic/releases)
- [Changelog](https://github.com/sqlalchemy/alembic/blob/main/CHANGES)
- [Commits](https://github.com/sqlalchemy/alembic/commits)

---
updated-dependencies:
- dependency-name: alembic
  dependency-version: 1.18.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* Bump ruff from 0.14.14 to 0.15.0 in /server

Bumps [ruff](https://github.com/astral-sh/ruff) from 0.14.14 to 0.15.0.
- [Release notes](https://github.com/astral-sh/ruff/releases)
- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)
- [Commits](astral-sh/ruff@0.14.14...0.15.0)

---
updated-dependencies:
- dependency-name: ruff
  dependency-version: 0.15.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* Fix ruff 0.15.0 lint and formatting violations

Address newly stabilized rules and 2026 formatter style:
- PLW0108: Add noqa for Marshmallow forward-reference lambda in schemas.py
- PLC0207: Add maxsplit=1 to str.split() in version_checker.py
- Parenthesize multi-line ternary in lambda for 2026 format style

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Tim Bradgate <timbradgate@hotmail.co.uk>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
@sonarqubecloud
Copy link

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

release Pull requests for creating a new release xlarge-diff

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant