Commit Graph
9336 Commits
Author SHA1 Message Date
Artyom Savchenko fc74a0c7f1 Merge branch 'develop' of https://github.com/hcengineering/platform into staging-new s0.7.437 2026-08-01 08:31:26 +07:00
Artyom SavchenkoandGitHub 8c9df54eb0 Add script to verify all backup data is present in a workspace (#10999)
* Add script to verify all backup data is present in a workspace

Signed-off-by: Artyom Savchenko <armisav@gmail.com>

* Verify blobs exist

Signed-off-by: Artyom Savchenko <armisav@gmail.com>

* Fix formatting

Signed-off-by: Artyom Savchenko <armisav@gmail.com>

---------

Signed-off-by: Artyom Savchenko <armisav@gmail.com>
2026-08-01 07:35:39 +07:00
Artyom SavchenkoandGitHub b056667372 Fix rekoni temp files clean up (#11000)
* Fix rekoni files clean up

Signed-off-by: Artyom Savchenko <armisav@gmail.com>

* Fix formatting

Signed-off-by: Artyom Savchenko <armisav@gmail.com>

* Fix copyright

Signed-off-by: Artyom Savchenko <armisav@gmail.com>

---------

Signed-off-by: Artyom Savchenko <armisav@gmail.com>
2026-08-01 07:35:24 +07:00
Artyom SavchenkoandGitHub 9b607d36ea Fix cross-workspace blob/thumbnail and metadata disclosure (#10972)
* Fix cross-workspace blob/thumbnail and metadata disclosure

The preview pod's thumbnail and metadata routes did not validate the
caller's token against the workspace taken from the URL.

Reported-by: Ugur Ozer, Aeon AI Risk Management

Signed-off-by: Artyom Savchenko <armisav@gmail.com>

* Update copyright year

Signed-off-by: Artyom Savchenko <armisav@gmail.com>

* Use secure mode

Signed-off-by: Artyom Savchenko <armisav@gmail.com>

* Fix formatting

Signed-off-by: Artyom Savchenko <armisav@gmail.com>

* Remove uuid check

Signed-off-by: Artyom Savchenko <armisav@gmail.com>

---------

Signed-off-by: Artyom Savchenko <armisav@gmail.com>
2026-07-28 15:56:18 +07:00
Artyom SavchenkoandGitHub de784bf2ef Clean up commented tools (#10993)
* Clean up commented tools

Signed-off-by: Artyom Savchenko <armisav@gmail.com>

* Clean up

Signed-off-by: Artyom Savchenko <armisav@gmail.com>

---------

Signed-off-by: Artyom Savchenko <armisav@gmail.com>
2026-07-27 11:54:07 +07:00
Don KendallandGitHub afe11faec1 fix(account): authorize mergeSpecifiedPersons / canMergeSpecifiedPersons (#10997)
* fix(account): authorize mergeSpecifiedPersons / canMergeSpecifiedPersons

Both operations decoded the caller token and discarded the result, so any
authenticated caller could merge any two persons by uuid. Merging re-points
the secondary person's social ids onto the primary one, and neither login
nor password recovery require a social id to be verified, so this reached
as far as taking over an arbitrary account.

Authorize both behind verifyMergePersonsAuthority:

- global admin tokens and the tool/workspace services pass, matching the
  account level mergeSpecifiedAccounts;
- everybody else must maintain the workspace their token carries, and both
  persons must be within its reach: a person holding an account elsewhere,
  and the platform wide system and guest accounts, are refused;
- a login capable social id may not move onto an account the caller does
  not own. doMergePersons only refuses verified secondary social ids, which
  leaves the unverified ones a maintainer could mint for themselves.

canMergeSpecifiedPersons answers false instead of throwing: it is the
predicate the merge dialog polls, and it awaits it without a catch.

Claude-Session: https://claude.ai/code/session_01ANdoXbdn5k2hZy734EwKe7
Signed-off-by: Don Kendall <dkendall@ledoweb.com>

* test(account): cover merge persons authorization

Nineteen cases over both operations: the reported attack shape, the
maintainer to owner escalation through an unverified email, foreign
accounts on either side of the merge, the platform guest account, and the
paths that must keep working (workspace contacts, members, tool service
and admin tokens). Removing the authorization check fails eight of them.

Claude-Session: https://claude.ai/code/session_01ANdoXbdn5k2hZy734EwKe7
Signed-off-by: Don Kendall <dkendall@ledoweb.com>

---------

Signed-off-by: Don Kendall <dkendall@ledoweb.com>
2026-07-27 11:46:18 +07:00
Why_So_SeriousandGitHub e34f546b8c fix(github): restore the recovery path for revoked user OAuth tokens (#10995)
* fix(github): honour the force flag in checkRefreshToken

`checkRefreshToken` accepts a `force` parameter but never reads it, so the
only caller that passes `force = true` (worker.ts, when re-syncing a user)
behaves exactly like the non-forced call and skips the refresh entirely.

Gate the refresh on `force || expired` instead of on expiry alone. As a
side effect a record with a `refreshToken` but a null `expiresIn` is now
validated when forced, instead of being reported as valid unchecked.

Signed-off-by: koreanjoker <namug014@gmail.com>

* fix(github): return undefined from getOctokit when the token is dead

When `checkRefreshToken` reports failure, `getOctokit` cleared
`record.octokit` and then fell straight through to constructing a new
Octokit from the very token that was just rejected. The method therefore
never returned `undefined` for a revoked user, so the
`(await getOctokit(...)) ?? container.container.octokit` installation-token
fallback that the sync code already writes at 13 call sites was
unreachable.

Return `undefined` after clearing the client so the existing fallback can
take effect.

Signed-off-by: koreanjoker <namug014@gmail.com>

* fix(github): preserve accounts when deserialising a user secret

`updateUser` serialises the whole `GithubUserRecord` — `accounts`
included — into the integration secret, but `secretToUserRecord` placed a
literal `accounts: {}` after the spread of the parsed payload, discarding
whatever was stored.

Every consumer of a record loaded through `getAccount` therefore saw an
empty map. `revokeUserAuth` iterates `Object.entries(record.accounts)`, so
its body never ran and the re-authorisation notice was never written to
any workspace.

Read `accounts` back from the parsed payload, keeping `{}` as the fallback
for records written before the field existed.

Signed-off-by: koreanjoker <namug014@gmail.com>

---------

Signed-off-by: koreanjoker <namug014@gmail.com>
2026-07-27 00:11:38 +07:00
Denis BykhovandGitHub c36dd74fef Add AllMatchValue function and related updates across multiple files (#10990)
Signed-off-by: Denis Bykhov <bykhov.denis@gmail.com>
2026-07-21 20:51:02 +05:00
Artyom Savchenko 0072204e78 Merge branch 'develop' of https://github.com/hcengineering/platform into staging-new s0.7.436 2026-07-20 19:41:21 +07:00
Artyom SavchenkoandGitHub 92eaefcc4d Fix workspace check (#10988)
* Fix workspace check

Signed-off-by: Artyom Savchenko <armisav@gmail.com>

* Fix workspace validation

Signed-off-by: Artyom Savchenko <armisav@gmail.com>

---------

Signed-off-by: Artyom Savchenko <armisav@gmail.com>
2026-07-20 19:40:24 +07:00
Artyom Savchenko 597c7043fd Merge branch 'develop' of https://github.com/hcengineering/platform into staging-new s0.7.435 2026-07-20 14:22:37 +07:00
Artyom SavchenkoandGitHub 5ca6b42529 Add script to validate workspace (#10987)
Signed-off-by: Artyom Savchenko <armisav@gmail.com>
2026-07-20 12:03:45 +05:00
Artyom Savchenko 1bf5d4ddfc Merge branch 'develop' of https://github.com/hcengineering/platform into staging-new s0.7.434 2026-07-20 12:44:07 +07:00
Denis BykhovandGitHub 4c94335cc1 Fix relation attribute editor (#10986)
Signed-off-by: Denis Bykhov <bykhov.denis@gmail.com>
2026-07-20 11:42:27 +07:00
Artyom SavchenkoandGitHub c19694b476 Fix validation error in export service (#10985)
Signed-off-by: Artyom Savchenko <armisav@gmail.com>
2026-07-19 21:29:16 +07:00
Artyom Savchenko 5f3bf90b05 Merge branch 'develop' of https://github.com/hcengineering/platform into staging-new
Signed-off-by: Artyom Savchenko <armisav@gmail.com>
s0.7.433
2026-07-19 19:59:16 +07:00
Artyom SavchenkoGitHubCopilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
3cae972cf5 Fix export sync endpoint in case of exporting several spaces (#10984)
* Fix export sync endpoint in case of exporting several spaces

Signed-off-by: Artyom Savchenko <armisav@gmail.com>

* Potential fix for pull request finding 'CodeQL / Uncontrolled data used in path expression'

Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
Signed-off-by: Artyom Savchenko <armisav@gmail.com>

---------

Signed-off-by: Artyom Savchenko <armisav@gmail.com>
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
2026-07-19 19:58:25 +07:00
Alexander OnnikovandGitHub 4c5d2d578e fix: use -webkit-user-select for text selection on Safari (#10982)
Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com>
2026-07-17 16:44:09 +07:00
Alexander OnnikovandGitHub 21dfcf0774 fix: allow inactive members in departments (#10983)
Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com>
2026-07-17 16:43:14 +07:00
Artyom Savchenko 1fd20a140b Merge branch 'develop' of https://github.com/hcengineering/platform into staging-new s0.7.432 2026-07-16 16:04:01 +07:00
Alexander OnnikovandGitHub 293bc91888 fix: proper hr members update (#10977)
Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com>
2026-07-14 17:28:54 +07:00
Artyom SavchenkoandGitHub ca2010fb63 Create SECURITY.md (#10971)
Signed-off-by: Artyom Savchenko <armisav@gmail.com>
2026-07-14 15:09:29 +07:00
Artyom Savchenko 51814adbef Fix tests
Signed-off-by: Artyom Savchenko <armisav@gmail.com>
s0.7.431
2026-07-12 09:35:39 +07:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
fb596e91dc Bump actions/cache from 5 to 6 (#10925)
Bumps [actions/cache](https://github.com/actions/cache) from 5 to 6.
- [Release notes](https://github.com/actions/cache/releases)
- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)
- [Commits](https://github.com/actions/cache/compare/v5...v6)

---
updated-dependencies:
- dependency-name: actions/cache
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-12 08:32:47 +07:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
abf82c1e67 Bump actions/checkout from 6 to 7 (#10916)
Bumps [actions/checkout](https://github.com/actions/checkout) from 6 to 7.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v6...v7)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-12 08:32:19 +07:00
Artyom Savchenko c09a6ad8b6 Merge with develop
Signed-off-by: Artyom Savchenko <armisav@gmail.com>
2026-07-12 08:29:59 +07:00
Artyom SavchenkoGitHubCopilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
2bcf85beb4 Fix export issues (#10967)
* Fix export

Signed-off-by: Artyom Savchenko <armisav@gmail.com>

* Fix copyright error

Signed-off-by: Artyom Savchenko <armisav@gmail.com>

* Potential fix for pull request finding 'CodeQL / Uncontrolled data used in path expression'

Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
Signed-off-by: Artyom Savchenko <armisav@gmail.com>

* Format fixes

Signed-off-by: Artyom Savchenko <armisav@gmail.com>

* Sanitize names

Signed-off-by: Artyom Savchenko <armisav@gmail.com>

* Fix file format

Signed-off-by: Artyom Savchenko <armisav@gmail.com>

* Update copyright year

Signed-off-by: Artyom Savchenko <armisav@gmail.com>

---------

Signed-off-by: Artyom Savchenko <armisav@gmail.com>
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
2026-07-10 17:53:48 +07:00
Artyom SavchenkoandGitHub 8ba43d54eb Fix filtered view visibility (#10969)
Signed-off-by: Artyom Savchenko <armisav@gmail.com>
2026-07-10 17:32:33 +07:00
abe0cb9625 feat(tracker): Gantt scheduling schema (startDate + IssueRelation) + version bump (#10851)
* feat(tracker): add Gantt scheduling schema (startDate + IssueRelation)

Schema-only foundation for the upcoming Gantt-chart view in tracker.
No UI in this PR.

Changes:
- Issue.startDate: Timestamp | null (interface + IssueDraft + @Prop with @Index)
- Milestone.startDate: Timestamp | null (interface + @Prop, reusing the
  existing tracker.string.StartDate IntlString)
- New DependencyKind type ('finish-to-start' | 'start-to-start' |
  'finish-to-finish' | 'start-to-finish')
- New IssueRelation AttachedDoc class with kind: DependencyKind, signed
  lag: number — registered in models/tracker via TIssueRelation
- 7 new IntlString keys: IssueStartDate, GanttDependency,
  GanttDependency{FinishToStart,StartToStart,FinishToFinish,StartToFinish},
  GanttLag — all 13 locales updated
- Cross-plugin literal updates in importer + github sync to satisfy the new
  required Issue.startDate / Milestone.startDate fields:
  - packages/importer/src/importer/importer.ts: AttachedData<Issue> literal
  - services/github/pod-github/src/sync/issueBase.ts: 'startDate' added to
    GithubIssueData Omit list (github sync does not own scheduling)
  - services/github/pod-github/src/sync/issues.ts + pullrequests.ts:
    AttachedData<Issue|GithubPullRequest> literals

Out of scope (deferred to follow-up PRs):
- UI for Gantt view, drag/resize, dependency editor, critical path
- blockedBy → IssueRelation migration (ships atomically with the writer
  redirect in the dependency-UI PR)
- LinkIssues permission (tracker uses forbid-style permissions; needs
  maintainer discussion)
- Activity-feed wiring for IssueRelation (needs a producer to test against)
- IssueTemplate.startDate (template propagation semantics undecided)

Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>

* test(model-tracker): add migrateAddStartDate jest tests

3 tests covering migrateAddStartDate:
- writes startDate=null to Issues in DOMAIN_TASK with the right filter
- writes startDate=null to Milestones in DOMAIN_TRACKER with the right filter
- issues exactly two update calls (one per class)

Follows the MigrationClient mock pattern from
models/chat/src/__tests__/migration.test.ts.

Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>

* feat(model-tracker): add migrateAddStartDate + wire into trackerOperation

Backfills startDate=null on existing Issues (DOMAIN_TASK) and Milestones
(DOMAIN_TRACKER) so the new schema field has a defined value on every
pre-existing document. Idempotent via the standard tryMigrate state-key
mechanism (state: 'gantt-add-startdate').

Verified domain choices against existing migration helpers:
- migrateIdentifiers / passIdentifierToParentInfo use DOMAIN_TASK for
  Issues (lines 145, 161 in this file).
- TMilestone @Model decorator confirms DOMAIN_TRACKER for Milestones
  (models/tracker/src/types.ts:372).

Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>

* feat(tracker): expose Issue.startDate / Milestone.startDate in UI; tighten typing

UI changes (so the new schema fields are actually editable, in chronological
order Start → Due/Target):

- New StartDateEditor.svelte (mirrors DueDateEditor.svelte for startDate)
- ControlPanel: render Start Date row above Due Date row in the issue
  side panel; both always-visible (no `!== null` guard) so users can set
  them on issues that don't have a date yet
- NewMilestone form: Start Date input above Target Date input
- Milestone list view: Start Date column before Target Date column

- TIssueRelation: tighten interface to `extends AttachedDoc<Issue, 'relations'>`
  so attachedTo + collection are statically typed. The model class
  re-declares `collection: 'relations'` to match the narrower base.
- Drop 4 unused Dependency-kind IntlString keys (FinishToFinish,
  FinishToStart, StartToFinish, StartToStart) — they had no consumer
  in PR 1; will be re-introduced in PR 4 (dependency editor).
- Simplify migration.ts comments — drop ageing line-references.

Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>

* fix(tracker): set explicit @Prop ranks for Milestone date fields

The DocAttributeBar side panel sorts attributes by attr.rank ?? toRank(_id)
(see plugins/view-resources/src/components/ClassAttributeBar.svelte:42-47),
so without explicit ranks the visible order on a Milestone was hash-based
(startDate before Status, breaking the chronological flow the user expects).

Set ranks so the side panel renders Status → Start date → Target date.
Comments and attachments stay where they are (they're collections, filtered
out of the attribute panel by categorizeFields).

Issues are unaffected — the Issue side panel is the custom ControlPanel.svelte
which renders Start date / Due date in explicit slots (see PR 1's UI commit).

Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>

* fix(tracker-resources): EditMilestone renders Status/Start/Target in body in chronological order

The right-side DocAttributeBar sorts attributes by attr.rank ?? toRank(_id),
giving startDate before status (toRank('startDate') < toRank('status')
lexicographically). Setting an explicit rank via @Prop's third arg did not
propagate through the workspace upgrade for existing Attribute documents
in the model TX log — the rank made it into the bundled txes but the
existing Attribute creation TXes are not replaced on upgrade-workspace.

Pivot: render Status, Start date, Target date in the EditMilestone body
in explicit chronological order, and add 'status', 'startDate', 'targetDate'
to ignoreKeys so they don't appear duplicated in the side panel. This
mirrors how Issue's ControlPanel.svelte handles its date fields.

Reverts the no-op @Prop rank attempt.

Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>

* fix(fulltext): bump model version to 0.7.423 to match deployed workspaces

The fulltext-pod's compiled model version (baked into bundle/model.json via
common/scripts/version.txt at build time) lags whenever the workspaces have
been migrated to a newer patch but the pod was not rebuilt. In that state the
indexer rejects every incoming Tx with a `wrong version` warning, new issues
silently fail to land in Elasticsearch, and search returns empty results for
any document created after the migration.

Bumping `version.txt` aligns the compiled model with the workspaces. All
future builds (front, transactor, workspace, tool, fulltext) will emit
0.7.423, the indexer accepts the Tx stream again, and the deferred backlog
gets consumed automatically — no manual reindex needed.

This commit is the build-side companion to the schema migration in this
same PR. Without it the fulltext-pod cannot consume the migrated workspace's
Tx events.

Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>

* chore: apply rush format after develop merge

Resolves the failing formatting check requested by @ArtyomSavchenko in
review of #10851 after the develop branch merge.

Affects three files in our PR scope:
- models/tracker/src/migration.ts: collapse short multi-line client.update call
- plugins/tracker/src/index.ts: inline DependencyKind union + IssueRelation comment
- plugins/tracker-resources/src/components/milestones/EditMilestone.svelte:
  reformat inline arrow handlers, move QueryIssuesList block ahead of <style>

No logic changes; deterministic prettier output.

Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>

* test(tracker): fix milestone page-object selectors after startDate field addition

The Gantt schema PR added Milestone.startDate, which:

1. Adds a second datetime-button to the NewMilestone form pool. The
   existing 'div.antiCard-pool button.datetime-button' locator matched
   both buttons and tripped Playwright's strict-mode check. Scope the
   target-date locator to .last() and add a sibling .first() helper for
   the start-date button.

2. Moves Status / Start date / Target date editors from the
   auto-generated side panel into EditMilestone's body
   (div.dates-row > div.date-cell > span.cell-label + <button>) in
   chronological order. The label span no longer has a sibling <div>
   wrapping the button — the button is a direct sibling. Switch the
   buttonStatus/buttonTargetDate XPath to following-sibling::button[1]
   and match the new class="cell-label" span. Add a buttonStartDate
   helper for the new editor row.

Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>

* test(tracker): shift buttonEstimation index after startDate row addition

ControlPanel.svelte (issue side panel) now renders the Start date and
Due date rows unconditionally — pre-PR the Due date row was conditional
on issue.dueDate !== null and the Start date row didn't exist at all.
Both new rows emit a <div><button> pair via DueDatePresenter, which the
existing (//span[text()='Estimation']/../div/button)[3] XPath counts as
extra matches and pushes the Estimation button from the 3rd to the 5th
direct div/button under the popupPanel-body__aside-grid.

Direct div/button order under the grid (document order):
  1. CreatedBy (EmployeeBox > UserBox div > Button)
  2. Assignee  (AssigneeEditor div > Button)
  3. Start date (NEW — StartDateEditor > DueDatePresenter div > button.datetime-button)
  4. Due date   (NEW — DueDateEditor   > DueDatePresenter div > button.datetime-button)
  5. Estimation (AttributeBarEditor div > Button)

buttonAssignee at [2] is unchanged. textEstimation uses 'following-sibling::div[1]'
(first sibling), which is unaffected by additions earlier in the grid.

Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>

* chore: apply rush format (prettier compliance for CI)

CI's rush fast-format --branch develop step flagged
tests/sanity/tests/model/tracker/milestones-details-page.ts for a
missing blank line between the buttonTargetDate locator (introduced in
86b1c19ee8) and the next field. Apply the local 'rush format' result.

The two other files CI flagged
(plugins/process-resources/src/components/settings/BindingsEditor.svelte
and ImportSlotsPopup.svelte) were actually upstream changes from PR
#10921 (Fix add tag) that landed after our last develop merge — the
preceding merge of upstream/develop into this branch resolves those
diffs.

Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>

* fix(tests/tracker): use contains() for cell-label class to survive Svelte CSS scoping

The Svelte 4 compiler appends a scoped `svelte-<hash>` class to every
element matched by a component-local CSS selector. EditMilestone.svelte
styles `.cell-label` locally, so each label span ends up as
`<span class="cell-label svelte-XXXXX">` at runtime, not the bare
`<span class="cell-label">` shipped in source. The previous XPath
locator used strict `@class="cell-label"` and never matched.

Switch buttonStatus / buttonStartDate / buttonTargetDate to the standard
`contains(concat(' ', normalize-space(@class), ' '), ' cell-label ')`
class-match idiom so the locators tolerate the added scoped class.

Verified against the playwright accessibility snapshot from the failed
run (artifact playwright-results, hash 07a8f36b...md): the Status row
renders as a generic with text 'Status' immediately followed by a
button 'In progress' as the next direct sibling, matching the rest of
the XPath.

Fixes 5 milestone.spec.ts failures observed in run 27816114236:
- Create a Milestone (locator timeout on checkIssue → buttonStatus)
- Edit a Milestone   (locator timeout on editIssue  → buttonStatus.click)
- Delete a Milestone (locator timeout on checkIssue → buttonStatus)
plus their two retries each.

Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>

---------

Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>
Co-authored-by: Michael Uray <michaeluray@users.noreply.github.com>
Co-authored-by: Artyom Savchenko <armisav@gmail.com>
2026-07-09 09:08:17 +07:00
Alexander OnnikovandGitHub 4891c65b3d fix: do not show notifications in print mode (#10962)
Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com>
2026-07-09 09:04:01 +07:00
Alexander OnnikovandGitHub e884e795a4 fix: encode filename in datalake url (#10963)
Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com>
2026-07-09 09:03:34 +07:00
Artyom SavchenkoandGitHub 703f6d4139 Fix export visibility (#10960)
Signed-off-by: Artyom Savchenko <armisav@gmail.com>
2026-07-08 16:18:31 +07:00
Artyom SavchenkoandGitHub dfe7d3d17c feat: Add ability to schedule notifications (#10789)
* feat: Add ability to schedule notifications

Signed-off-by: Artem Savchenko <armisav@gmail.com>

* Clean up

Signed-off-by: Artem Savchenko <armisav@gmail.com>

* Clean up

Signed-off-by: Artem Savchenko <armisav@gmail.com>

* Add docker file

Signed-off-by: Artem Savchenko <armisav@gmail.com>

* Rename pod

Signed-off-by: Artem Savchenko <armisav@gmail.com>

* Add debug logging

Signed-off-by: Artem Savchenko <armisav@gmail.com>

* Reminder fixes

Signed-off-by: Artem Savchenko <armisav@gmail.com>

* Fix reminders

Signed-off-by: Artem Savchenko <armisav@gmail.com>

* Support reminders for all events

Signed-off-by: Artem Savchenko <armisav@gmail.com>

* Clean up

Signed-off-by: Artem Savchenko <armisav@gmail.com>

* Support for project todo

Signed-off-by: Artem Savchenko <armisav@gmail.com>

* Fix mismatched dependency

Signed-off-by: Artem Savchenko <armisav@gmail.com>

* Use base event class

Signed-off-by: Artem Savchenko <armisav@gmail.com>

---------

Signed-off-by: Artem Savchenko <armisav@gmail.com>
2026-07-06 11:30:21 +05:00
Artyom SavchenkoandGitHub 184b4ec08f Allow to export documents without children (#10909)
* Allow to export documents without children

Signed-off-by: Artem Savchenko <armisav@gmail.com>

* Fix tests

Signed-off-by: Artem Savchenko <armisav@gmail.com>

---------

Signed-off-by: Artem Savchenko <armisav@gmail.com>
2026-07-06 11:29:21 +05:00
Denis BykhovandGitHub d2e92134cc fix: deduplicate object and document lists in DocTable and RelationEditor to prevent rendering issues (#10958)
Signed-off-by: Denis Bykhov <bykhov.denis@gmail.com>
2026-07-06 12:08:03 +07:00
Denis BykhovandGitHub 5c48abda35 feat: add viewlet integration and update attribute handling in various components (#10957)
Signed-off-by: Denis Bykhov <bykhov.denis@gmail.com>
2026-07-05 22:04:21 +05:00
Denis BykhovandGitHub 7f13ca3a0e Card space type filter (#10956)
Signed-off-by: Denis Bykhov <bykhov.denis@gmail.com>
2026-07-05 21:48:13 +05:00
Artyom Savchenko 0bf7720ed0 Merge branch 'develop' of https://github.com/hcengineering/platform into staging-new s0.7.429 2026-07-05 08:14:37 +07:00
Artyom SavchenkoandGitHub 3353c531bd Fix accounts restore error (#10955)
Signed-off-by: Artyom Savchenko <armisav@gmail.com>
2026-07-05 08:01:30 +07:00
Artyom Savchenko 949395c416 Merge branch 'develop' of https://github.com/hcengineering/platform into staging-new s0.7.428 2026-07-04 16:42:39 +07:00
Artyom SavchenkoandGitHub bc9220e977 Rescan accounts in backup (#10954)
Signed-off-by: Artyom Savchenko <armisav@gmail.com>
2026-07-04 16:39:16 +07:00
Artyom SavchenkoandGitHub 9069f9e92a Update backup restore guide (#10953)
Signed-off-by: Artyom Savchenko <armisav@gmail.com>
2026-07-04 11:43:26 +07:00
Denis BykhovandGitHub bede9c184f fix: handle missing card in CreateToDo function (#10952)
Signed-off-by: Denis Bykhov <bykhov.denis@gmail.com>
2026-07-04 00:03:58 +05:00
Artyom SavchenkoandGitHub 8541588be8 Revert "Fix publish npm (#10950)" (#10951)
This reverts commit 5bda0e790a.
2026-07-03 17:39:08 +07:00
Artyom Savchenko 66c88437a6 Merge with develop
Signed-off-by: Artyom Savchenko <armisav@gmail.com>
2026-07-03 13:01:11 +07:00
Artyom SavchenkoandGitHub 5bda0e790a Fix publish npm (#10950)
Signed-off-by: Artyom Savchenko <armisav@gmail.com>
2026-07-03 12:18:03 +07:00
1af4f10179 fix: desktop client should trust server's MODEL_VERSION (#10871)
The desktop preload script explicitly overrides serverConfig.MODEL_VERSION
with the value baked into the desktop binary at build time. This causes
the "New version is available" dialog to fire for self-hosted users
whenever desktop CI builds from a different commit than the server image
(i.e., when v* and s* tags diverge in version.txt).

Use the server's authoritative MODEL_VERSION instead, falling back to
the bundled value when the server does not report one.

Signed-off-by: Shannon Kerr <shannon@exaviz.com>
Co-authored-by: Artyom Savchenko <armisav@gmail.com>
2026-07-03 10:40:21 +07:00
Artyom Savchenko d7db9dd4c2 Fix popup layout
Signed-off-by: Artyom Savchenko <armisav@gmail.com>
s0.7.426 s0.7.427
2026-07-03 08:35:29 +07:00
Artyom Savchenko 37566e81e7 Update model version
Signed-off-by: Artyom Savchenko <armisav@gmail.com>
2026-07-02 23:12:03 +07:00
Artyom Savchenko 9d576cd7da Update model version
Signed-off-by: Artyom Savchenko <armisav@gmail.com>
2026-07-02 23:11:19 +07:00