# Alpha 50.6.7 — Telegram share links for Mandalas

## Release identity

```text
Base: v0.4.0-alpha.50.6.6
Candidate: 0.4.0-alpha.50.6.7
Commit: 42445ea
Tag: v0.4.0-alpha.50.6.7
Active release: /opt/pixdala/releases/v0.4.0-alpha.50.6.7
Status: deployed and manually verified
Date: 2026-09-23
```

## Problem

The Mini App “Копировать ссылку” action currently copies the full browser URL, which can include Telegram WebApp runtime query/hash data such as `tgWebAppData`. Such a URL is not a clean share link for another user and does not use the Telegram Main Mini App deep-link mechanism.

## Changes

- Generate share links through the Telegram Main Mini App deep-link format `https://t.me/PixDala_bot?startapp=...`.
- Use the active Mandala slug for ordinary Mandalas.
- Use `startapp=campaigns` for an active Special Mandala and preserve `campaigns-qa-<slug>` for QA campaign links.
- Use `startapp=competitive` for Competitive Mandalas.
- Keep the generated link independent of the current browser URL and Telegram WebApp `initData`.
- Add a pure `share-link.mjs` helper and focused unit coverage for supported link forms and encoding.
- Restyle the share button so its text remains clearly readable on the dark DigiDala interface and provide visible copied-state feedback.
- Refresh Mini App/package version and cache-busters to `0.4.0-alpha.50.6.7`.

## Automated verification

```text
Structure: OK
JavaScript syntax: OK
Unit: 19/19
Integration: 46/46
API: 17/17
Total: 82/82
```

## Deployment / manual Telegram QA

```text
Deployment: successful exact-tag deploy to the VPS.
Manual Telegram QA: passed.
```

The exact tag `v0.4.0-alpha.50.6.7` was pushed to GitHub and deployed successfully. Manual Telegram QA passed for share links under all tested Mandala types: ordinary Mandalas, Special, Competitive, Support and Creative. The copied links no longer expose the current browser URL or Telegram WebApp runtime data and open the requested Mandala in the Mini App. The share button text is clearly readable on the dark interface and the copied-state feedback is visible.

The full Competitive lifecycle remains open for a separate end-to-end test.

## Regression requirement

Existing Mandala routing, navigation and Telegram Main Mini App deep links must remain unchanged apart from the corrected share-link generation.

---

# DigiDala — Alpha 50.6.6 Changeset

## Candidate identity

```text
Base: v0.4.0-alpha.50.6.5
Candidate: 0.4.0-alpha.50.6.6
Status: candidate, not committed/tagged/deployed
Date: 2026-09-23
```

## Problem

After an active Special or Competitive Mandala had been opened directly, entering the same space through the Mini App left/right arrows could show the empty-space message. Refreshing the Mini App made the existing active space appear normally. The behavior reproduced for both Special and Competitive spaces.

## Root cause

Special-space arrow navigation did not stop the previous Mandala synchronization before starting the new bootstrap. In-flight requests from the previous route could continue during the transition and update shared Mini App state after the route changed. Bootstrap also treated any error as an empty-space condition.

## Changes

- Add a navigation-generation guard to invalidate stale in-flight requests.
- Reset the previous Mandala/campaign state and stop synchronization before entering Special or Competitive spaces via arrows.
- Restart synchronization after a successful Special/Competitive bootstrap.
- Treat a missing `active_campaign` as the empty state, but render a dedicated load-error state for request/bootstrap failures.
- Preserve backend APIs and campaign data model unchanged.
- Add regression contract coverage for stale-request invalidation, synchronization restart and error-state separation.
- Refresh Mini App/package version and cache-busters to `0.4.0-alpha.50.6.6`.

## Verification

```text
Structure: OK
JavaScript syntax: OK
Unit: 16/16
Integration: 46/46
API: 17/17
Total tests: 79/79
```

Deployment: pending.
Manual Telegram QA: pending.
