Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,6 @@ LEGACY_DATA_PATH=.
HEARTBEAT_PATH=data/scheduler-heartbeat.json
GEONAMES_USERNAME=
GEONAMES_ENDPOINT=https://secure.geonames.org
SOURCE_URL=https://github.com/WizardLoop/shabbat/releases/tag/v3.0.0
SOURCE_URL=https://github.com/WizardLoop/shabbat/releases/tag/v3.1.0

CUSTOM_EMOJI_ENABLED=1
78 changes: 39 additions & 39 deletions .github/CODE_OF_CONDUCT.md
Original file line number Diff line number Diff line change
@@ -1,39 +1,39 @@
# Contributor Covenant Code of Conduct
## Our Pledge
We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation.
## Our Standards
Examples of behavior that contributes to a positive environment for our community include:
- Using welcoming and inclusive language
- Being respectful of differing viewpoints and experiences
- Gracefully accepting constructive criticism
- Showing empathy towards other community members
Examples of unacceptable behavior include:
- The use of sexualized language or imagery and unwelcome sexual attention or advances
- Trolling, insulting or derogatory comments, and personal or political attacks
- Public or private harassment
- Publishing others’ private information, such as a physical or electronic address, without explicit permission
## Our Responsibilities
Project maintainers are responsible for clarifying the standards of acceptable behavior and will take appropriate and fair corrective action in response to any instances of unacceptable behavior.
## Scope
This Code of Conduct applies within all project spaces and in public spaces when an individual is representing the project or its community.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at [@WizardLoop on Telegram](https://t.me/WizardLoop) or contact@wizardloop.com.
All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 2.1, available at https://www.contributor-covenant.org/version/2/1/code_of_conduct.html
[homepage]: https://www.contributor-covenant.org
# Contributor Covenant Code of Conduct

## Our Pledge

We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation.

## Our Standards

Examples of behavior that contributes to a positive environment for our community include:
- Using welcoming and inclusive language
- Being respectful of differing viewpoints and experiences
- Gracefully accepting constructive criticism
- Showing empathy towards other community members

Examples of unacceptable behavior include:
- The use of sexualized language or imagery and unwelcome sexual attention or advances
- Trolling, insulting or derogatory comments, and personal or political attacks
- Public or private harassment
- Publishing others’ private information, such as a physical or electronic address, without explicit permission

## Our Responsibilities

Project maintainers are responsible for clarifying the standards of acceptable behavior and will take appropriate and fair corrective action in response to any instances of unacceptable behavior.

## Scope

This Code of Conduct applies within all project spaces and in public spaces when an individual is representing the project or its community.

## Enforcement

Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at [@WizardLoop on Telegram](https://t.me/WizardLoop) or contact@wizardloop.com.

All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances.

## Attribution

This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 2.1, available at https://www.contributor-covenant.org/version/2/1/code_of_conduct.html

[homepage]: https://www.contributor-covenant.org
2 changes: 1 addition & 1 deletion .github/CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,4 @@ Follow [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md). Explain the problem, resulting

Existing project contact: [@WizardLoop on Telegram](https://t.me/WizardLoop).

Composer validation uses --strict --no-check-all because MadelineProto is intentionally pinned to the exact reviewed source version. This retains schema and lock validation; only generic version-range recommendations are omitted.
MadelineProto uses a stable compatible range in composer.json. Deployment always uses composer.lock; dependency upgrades require fresh source review and patch manifests for the exact locked release. Never run composer update as a routine server upgrade. Composer validation retains strict schema and lock checks; --no-check-all suppresses generic version-range advice for reviewed dependency policies.
4 changes: 2 additions & 2 deletions .github/FUNDING.yml
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
github: ['WizardLoop']
custom: ['https://WizardLoop.t.me']
github: ['WizardLoop']
custom: ['https://WizardLoop.t.me']
68 changes: 34 additions & 34 deletions .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
@@ -1,37 +1,37 @@
name: "🐞 Bug report"
description: "Report a reproducible bug"
labels: [bug]
body:
- type: textarea
attributes:
label: "Describe the bug"
description: "A clear and concise description of what the bug is."
placeholder: "Bug description"
- type: textarea
attributes:
label: "Steps to Reproduce"
description: "What steps did you take that led to the bug?"
placeholder: "1. Go to ...\n2. Click ...\n3. See error"
- type: textarea
attributes:
label: "Expected behavior"
description: "What did you expect to happen?"
placeholder: "Expected behavior"
- type: textarea
attributes:
label: "Screenshots/Logs"
description: "Use synthetic examples and redact tokens, sessions, private group/user IDs, payment data and live databases."
- type: input
attributes:
label: "Bot Version / Commit"
description: "What version or commit are you using?"
- type: dropdown
attributes:
label: "Environment"
options:
- Self-hosted Linux
- Windows
- Other
name: "🐞 Bug report"
description: "Report a reproducible bug"
labels: [bug]
body:
- type: textarea
attributes:
label: "Describe the bug"
description: "A clear and concise description of what the bug is."
placeholder: "Bug description"
- type: textarea
attributes:
label: "Steps to Reproduce"
description: "What steps did you take that led to the bug?"
placeholder: "1. Go to ...\n2. Click ...\n3. See error"
- type: textarea
attributes:
label: "Expected behavior"
description: "What did you expect to happen?"
placeholder: "Expected behavior"
- type: textarea
attributes:
label: "Screenshots/Logs"
description: "Use synthetic examples and redact tokens, sessions, private group/user IDs, payment data and live databases."
- type: input
attributes:
label: "Bot Version / Commit"
description: "What version or commit are you using?"
- type: dropdown
attributes:
label: "Environment"
options:
- Self-hosted Linux
- Windows
- Other

- type: textarea
attributes:
Expand Down
36 changes: 18 additions & 18 deletions .github/ISSUE_TEMPLATE/feature_request.yml
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
name: "✨ Feature request"
description: "Suggest an idea or improvement"
labels: [enhancement]
body:
- type: textarea
attributes:
label: "Feature description"
description: "What would you like to see added?"
placeholder: "Feature details"
- type: textarea
attributes:
label: "Use case"
description: "Describe a real scenario where this feature would help."
placeholder: "Use case"
- type: textarea
attributes:
label: "Additional context"
description: "Anything else?"
name: "✨ Feature request"
description: "Suggest an idea or improvement"
labels: [enhancement]
body:
- type: textarea
attributes:
label: "Feature description"
description: "What would you like to see added?"
placeholder: "Feature details"
- type: textarea
attributes:
label: "Use case"
description: "Describe a real scenario where this feature would help."
placeholder: "Use case"
- type: textarea
attributes:
label: "Additional context"
description: "Anything else?"
28 changes: 14 additions & 14 deletions .github/ISSUE_TEMPLATE/improvement_question.yml
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
name: "❓ Improvement / Question"
description: "Suggest an improvement or ask a question"
labels: [question]
body:
- type: textarea
attributes:
label: "Improvement or Question"
description: "Describe your suggestion or question."
placeholder: "Your suggestion/question"
- type: textarea
attributes:
label: "Context"
description: "Where in the project do you want to see this?"
placeholder: "Relevant files, code, or context"
name: "❓ Improvement / Question"
description: "Suggest an improvement or ask a question"
labels: [question]
body:
- type: textarea
attributes:
label: "Improvement or Question"
description: "Describe your suggestion or question."
placeholder: "Your suggestion/question"
- type: textarea
attributes:
label: "Context"
description: "Where in the project do you want to see this?"
placeholder: "Relevant files, code, or context"
21 changes: 11 additions & 10 deletions .github/SECURITY.md
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
# Security Policy

## Reporting a Vulnerability

If you find a security issue, **do not open an issue on GitHub**.
Please report privately to [@WizardLoop on Telegram](https://t.me/WizardLoop) or via email: contact@wizardloop.com

---

We will address all reports promptly and responsibly.
# Security Policy

## Reporting a Vulnerability

If you find a security issue, **do not open an issue on GitHub**.

Please report privately to [@WizardLoop on Telegram](https://t.me/WizardLoop) or via email: contact@wizardloop.com

---

We will address all reports promptly and responsibly.

## Safe reproduction information

Expand Down
16 changes: 15 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,19 +6,33 @@ permissions:
contents: read
jobs:
php:
name: php (${{ matrix.php }})
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
php: ["8.3", "8.4", "8.5"]
include:
- php: "8.3"
version: "8.3.36"
- php: "8.4"
version: "8.4.27"
- php: "8.5"
version: "8.5.12"
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
- uses: shivammathur/setup-php@44454db4f0199b8b9685a5d763dc37cbf79108e1
env:
update: true
with:
php-version: ${{ matrix.php }}
php-version: ${{ matrix.version }}
extensions: pdo_sqlite, mbstring, xml, dom, fileinfo, zlib, zip
tools: composer:2.10.3
coverage: none
- name: Verify exact security-patched PHP runtime
env:
EXPECTED_PHP_VERSION: ${{ matrix.version }}
run: php -r 'if (PHP_VERSION !== getenv("EXPECTED_PHP_VERSION")) { fwrite(STDERR, "Unexpected PHP runtime " . PHP_VERSION . "\n"); exit(1); } echo "Verified PHP " . PHP_VERSION . "\n";'
- run: composer validate --strict --no-check-all
- run: composer install --no-interaction --prefer-dist
- run: composer check-platform-reqs
Expand Down
6 changes: 5 additions & 1 deletion .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,15 @@ jobs:
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
- uses: shivammathur/setup-php@44454db4f0199b8b9685a5d763dc37cbf79108e1
env:
update: true
with:
php-version: "8.4"
php-version: "8.4.27"
extensions: pdo_sqlite, mbstring, xml, dom, fileinfo, zlib, zip
tools: composer:2.10.3
coverage: none
- name: Verify exact security-patched PHP runtime
run: php -r 'if (PHP_VERSION !== "8.4.27") { fwrite(STDERR, "Unexpected PHP runtime " . PHP_VERSION . "\n"); exit(1); } echo "Verified PHP " . PHP_VERSION . "\n";'
- run: composer validate --strict --no-check-all
- run: composer install --no-interaction --prefer-dist
- run: composer check-platform-reqs
Expand Down
16 changes: 13 additions & 3 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,16 @@

PHP 8.3 compatibility: module-delivery bookkeeping now uses the database-owned `BEGIN IMMEDIATE` transaction state and exact connection identity; native callback/message fixtures initialize inherited readonly properties from their declaring class. Regression tests cover rejected foreign/outside transactions, rollback and state reset.

## 3.1.0

- Require PHP 8.3.36, 8.4.27 or 8.5.12 and later patches on those branches, incorporating the upstream security fixes published on 22 October 2026. Pin the Docker image to verified PHP 8.4.27 bytes and verify exact patched runtimes in CI and release packaging.
- Upgrade the official MadelineProto dependency to the reviewed stable 8.11.10 / TL layer 232 line, with reproducible Composer locking and a stable compatible version range.
- Retire the upstreamed UpdateLoop/cancellation, GeoPoint and formatted-date patch sets. Re-review the Fresh Peer and BroadcastManager patches against the updated dependency source.
- Update the central keyboard compatibility boundary for the new native inline constructors while preserving saved templates, callback identifiers, styles and reply-keyboard separation.
- Make legacy import reviewable with equivalent preview/apply parsing, duplicate and directory-only group reporting, bound comparison reports and post-import verification. Existing settings and unverified permission snapshots remain protected.
- Shorten the parallel English/Hebrew READMEs, consolidate historical development reports into current references, and provide a Hebrew staged upgrade/import/rollback guide that verifies the actual production path.
- Required clean-install, regression, static-analysis, Docker and archive checks must pass before a stable tag/release. Earlier 3.0.0 live acceptance is not new 3.1.0 acceptance. No production deployment is performed by this upgrade work.

## 3.0.0 - stable

- Promote the reviewed dev.9 implementation to stable 3.0.0 while retaining MadelineProto 8.7.0, SQLite, the Composer lock, all five approved patch sets and migrations 001–016. No new runtime feature or migration is introduced by this promotion.
Expand Down Expand Up @@ -50,7 +60,7 @@ PHP 8.3 compatibility: module-delivery bookkeeping now uses the database-owned `
## 3.0.0-dev.6 - permission equivalence and callback integration

- Correct the public statistics callback allowlist at the actual SDK update-handler boundary, including callbacks emitted by the home menu and statistics tabs. Unavailable original panels return a localized callback response without new-message flooding.
- Compare reviewed Telegram-equivalent default permission representations consistently for manual and automatic transitions, retaining original snapshots and genuine-conflict protection. See the dev.6 feedback report for evidence and limits.
- Compare reviewed Telegram-equivalent default permission representations consistently for manual and automatic transitions, retaining original snapshots and genuine-conflict protection. Historical evidence and limits are preserved in the 3.0.0 Git history.
- Shabbat messages across public, inline and scheduled defaults show the nearest Shabbat-containing period and current/upcoming holidays, including verified entrance/final-exit times for weekday Yom Tov before Shabbat, without later Shabbat summaries, numeric UTC suffixes or visible source/update footers. Actual configured methods and validated source provenance remain intact.
- Recognize both captured provider spellings of Chol Hamoed for reminder policy, while retaining its non-Yom-Tov classification. Keep a verified active festival visible when its final exit is after civil midnight.
- Direct test-folder upload is documented; deployment ZIP/checksum files are excluded from Docker context. No dependency, patch or migration update is required.
Expand All @@ -68,7 +78,7 @@ PHP 8.3 compatibility: module-delivery bookkeeping now uses the database-owned `
- `source` combines repository, license and build identity. Legacy `license`/`version` commands remain aliases; the project repository is always linked separately from the deployment's exact source offer.
- Expanded help and all changes are translated into Hebrew, English, Russian, French, Spanish and Brazilian Portuguese.

Migrations 001-012, Composer lock and all four library patch sets are unchanged from dev.4. No new schema migration is needed for dev.5, but the stopped-writer backup/migrate command remains part of the update procedure. See [the 11-item verification map](docs/DEV5_TEST_FEEDBACK.md) and [Docker test deployment](docs/SERVER_TEST_DEPLOYMENT.md). The supplied log proves repeated auxiliary IPC churn, not a completed reproduction of a live Telegram restart hang or the original permission error. No Docker or real Telegram acceptance is claimed.
Migrations 001-012, Composer lock and all four library patch sets are unchanged from dev.4. No new schema migration is needed for dev.5, but the stopped-writer backup/migrate command remains part of the update procedure. See [Docker test deployment](docs/SERVER_TEST_DEPLOYMENT.md). The supplied log proves repeated auxiliary IPC churn, not a completed reproduction of a live Telegram restart hang or the original permission error. No Docker or real Telegram acceptance is claimed.

## 3.0.0-dev.4 - unpublished local development snapshot

Expand Down Expand Up @@ -157,7 +167,7 @@ Dependencies, four reviewed library patches and eight migration files remain unc
* Exact 8.5-degree nightfall and explicit minute choices are retained without integer truncation or arbitrary minute adjustments.
* Native integer peer IDs are handled in private GPS and payment updates; bot-owned GPS reply tokens remain scoped to their user/group.
* A separate exact-source MadelineProto GeoPoint correction preserves fractional coordinates before inline dispatch.
* A new reviewed formatted-date correction completes the locked entity factory and adds a typed native/Bot API wrapper. It preserves timestamps, UTF-16 offsets and valid flags, with strict two-file/schema guards; historical reference code with unresolved grants is not redistributed. See [review](docs/MADELINE_FORMATTED_DATE.md).
* A new reviewed formatted-date correction completes the locked entity factory and adds a typed native/Bot API wrapper. It preserves timestamps, UTF-16 offsets and valid flags, with strict two-file/schema guards; historical reference code with unresolved grants is not redistributed. See [historical source and license findings](docs/THIRD_PARTY_DETAILS.md).
* Permission FLOOD_WAIT deadlines survive restart, stale/expired owners cannot confirm mutations, and desired state is refreshed before RPCs.
* Content waits for bot-owned permission recovery; Omer waits its configured gap after the actual restore. Eligibility deferrals do not exhaust transport retries.
* Explicit group rejoining preserves settings, while startup list import cannot reactivate removed groups. Startup schema validation rejects missing or changed migrations without writing.
Expand Down
Loading
Loading