Skip to content

ship 3.2.0 release#465

Merged
mesilov merged 126 commits into
v3from
v3-dev
May 22, 2026
Merged

ship 3.2.0 release#465
mesilov merged 126 commits into
v3from
v3-dev

Conversation

@mesilov
Copy link
Copy Markdown
Collaborator

@mesilov mesilov commented Apr 29, 2026

Q A
Bug fix? yes
New feature? yes
Deprecations? no
Issues Fix #436
License MIT

Closes #436

mesilov and others added 30 commits April 18, 2026 01:42
…422)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Add IM placement codes and fluent option builders (#437)
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Require MCP-based PR status poll after every push (#437)
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…`, `IM_CONTEXT_MENU`, `IM_SIDEBAR`, `IM_TEXTAREA` with updated option builders and typed bindings/unbindings.

Signed-off-by: mesilov <mesilov.maxim@gmail.com>
Signed-off-by: mesilov <mesilov.maxim@gmail.com>
Add a Core rules block to the "Creating a Pull Request" section:
- Agent must auto-create the PR via mcp__github__create_pull_request;
  never forward the pull/new URL as a manual-action prompt.
- PR base branch is fixed by API version: v3-dev for v3, dev for v1;
  never main.
- PR body always composed from .github/PULL_REQUEST_TEMPLATE.md read
  fresh from disk, not a memorised layout.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Implements six REST methods under the im scope:
- add: im.message.add -> AddedItemResult
- update: im.message.update -> UpdatedItemResult
- delete: im.message.delete -> DeletedItemResult
- like: im.message.like (LikeAction enum) -> UpdatedItemResult
- share: im.message.share (ShareType enum) -> UpdatedItemResult
- command: im.message.command -> UpdatedItemResult

Wires IMServiceBuilder::message() cached accessor, adds unit
and integration test suites (integration_tests_im_message),
Makefile target test-integration-im-message, and CHANGELOG
entry under 3.2.0 UNRELEASED.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…om/bitrix24/b24phpsdk into feature/426-add-im-message-service

# Conflicts:
#	tests/Unit/Services/IM/IMServiceBuilderTest.php
mesilov and others added 27 commits April 29, 2026 14:29
…rbonImmutable`

Signed-off-by: mesilov <mesilov.maxim@gmail.com>
Add IM User service for im.user.get and im.user.list.get
- Add send() → im.notify (app-context notification)
- Add getList() → im.notify.get with NotifiesResult
- Add historySearch() → im.notify.history.search with NotifyHistorySearchResult
- Add markAllAsRead() → im.notify.read.all with NotifyReadAllResult
- Add getSchema() → im.notify.schema.get with NotifySchemaResult
- Refactor markMessagesAsRead/markMessagesAsUnread to call im.notify.read.list
- Add NotifyItemResult and NotifySchemaItemResult annotated items
- Add unit tests, integration tests, and annotation tests
- Add integration_tests_im_notify PHPUnit suite and make target

https://claude.ai/code/session_01CaVn2RydgouYyCqv1rxChK
Implements im.recent.get, im.recent.list, im.recent.pin,
im.recent.unread, and im.recent.hide via
Bitrix24\SDK\Services\IM\Recent\Service\Recent.

Adds RecentItemResult, RecentsResult, IMServiceBuilder::recent(),
unit/integration/annotation tests, phpunit suite, and Makefile target.

https://claude.ai/code/session_01JU6axyfnTk62HoezmhWfWL
…8-f5LTv

# Conflicts:
#	CHANGELOG.md
#	Makefile
#	phpunit.xml.dist
- Updated `NotifySchemaItemResult` and `NotifyItemResult` annotations to align with live REST payloads.
- Adjusted schema field casing in `NotifySchemaItemResult` to uppercase.
- Refactored unit test naming consistency for `Notify` functionality.
- Fixed `array_values` mapping in `NotifySchemaResult` to prevent issues with schema transformations.
- Enhanced return type variable naming in integration tests for clarity.

Signed-off-by: mesilov <mesilov.maxim@gmail.com>
feat: extend IM\Notify service with missing im.notify.* methods
…onsTest` and update type annotations

- Renamed and reorganized integration tests for `RecentItemResult` into `RecentItemResultAnnotationsTest`.
- Updated `RecentItemResult` with new fields (`last_id`, `has_reminder`, `date_update`, etc.) and improved type annotations.
- Enhanced type safety with consistent property definitions and runtime casting.

Signed-off-by: mesilov <mesilov.maxim@gmail.com>
…ecent.get` payload fields

- Adjusted PHPDoc comments in `RecentItemResult` to match live REST API data structure and magic getter behavior.
- Updated `CHANGELOG.md` with details of the fix.

Signed-off-by: mesilov <mesilov.maxim@gmail.com>
- ChatUser service wraps im.chat.user.add, im.chat.user.delete, im.chat.user.list
- ChatUserListResult returns flat int[] of participant user IDs
- IMServiceBuilder::chatUser() exposes the new service
- Unit and integration tests added
- phpunit.xml.dist suite integration_tests_im_chat_user added
- Makefile target test-integration-im-chat-user added
Add IM\Recent service for im.recent.* API support
…471)

The soft-delete flow (markAsDeleted() + save()) makes the explicit delete()
method redundant — it was never called by any use case handler and its
implementation only duplicated a business invariant already enforced by
the entity itself.

https://claude.ai/code/session_01964BQ47XMfxWRzEuCSQu9S
Remove dead `delete()` method from Bitrix24PartnerRepositoryInterface
Add IM\ChatUser service for im.chat.user.* API support
- Introduced `Search` service in `Bitrix24\SDK\Services\IM\Search\Service` to wrap IM search API (`im.search.chat.list`, `im.search.user.list`, `im.search.department.list`, and legacy `im.search.last.*` methods).
- Implemented typed results for `SearchChatsResult`, `SearchUsersResult`, `SearchDepartmentsResult`, and `SearchLastItemsResult`.
- Added annotated result items (`SearchChatItemResult`, `SearchUserItemResult`, `SearchDepartmentItemResult`).
- Updated `CHANGELOG.md`, `Makefile`, and `phpunit.xml.dist`.
- Includes unit and integration tests for result annotations, service integration, and live API interactions.

Signed-off-by: mesilov <mesilov.maxim@gmail.com>
…disk-service

# Conflicts:
#	CHANGELOG.md
#	Makefile
#	phpunit.xml.dist
#	src/Services/IM/IMServiceBuilder.php
#	tests/Unit/Services/IM/IMServiceBuilderTest.php
Add IM Disk service for im.disk.folder.get
…ervice

Add IM\Department service for im.department.* methods
…pository-contract

Refactor uniqueness check in Bitrix24PartnerRepository test contract
Signed-off-by: mesilov <mesilov.maxim@gmail.com>
@mesilov mesilov marked this pull request as ready for review May 22, 2026 19:22
@mesilov mesilov merged commit 0a5aa67 into v3 May 22, 2026
10 checks passed
Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 025f0adc6a

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +292 to +320
if (is_int($value)) {
return new ResultFieldDescriptor($fieldName, 'integer', null, false, source: 'api');
}

if (is_bool($value)) {
return new ResultFieldDescriptor($fieldName, 'boolean', null, false, source: 'api');
}

if (is_array($value)) {
return new ResultFieldDescriptor(
$fieldName,
array_is_list($value) ? 'array' : 'object',
null,
false,
source: 'api',
);
}

if (is_string($value)) {
[$type, $format] = $this->inferStringType($value);

return new ResultFieldDescriptor($fieldName, $type, $format, false, source: 'api');
}

if ($value === null) {
return new ResultFieldDescriptor($fieldName, 'mixed', null, true, source: 'api');
}

return new ResultFieldDescriptor($fieldName, 'mixed', null, false, source: 'api');
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Infer float fields instead of downgrading them to mixed

The runtime type inference in ResultItemPayloadVerifier never handles float values, so any decimal field fetched from live API falls through to the default mixed branch. This produces false type mismatches in verification reports and can cause generated payload metadata to drift toward weaker types (mixed instead of float), which undermines the result-item generation workflow for methods returning numeric decimals.

Useful? React with 👍 / 👎.

Comment on lines +332 to +333
if ((bool) preg_match('/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}[+-]\d{2}:\d{2}$/', $value)) {
return ['string', 'date-time'];
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Recognize UTC 'Z' datetimes when inferring string formats

The datetime detection regex only matches offsets like +03:00 and misses valid ISO-8601 timestamps ending with Z (UTC). When the API returns values such as 2026-05-22T12:34:56Z, the verifier classifies them as plain strings, creating avoidable type mismatches and incorrect follow-up suggestions in verification reports.

Useful? React with 👍 / 👎.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Shipping new SDK release]: 3.2.0

2 participants