Skip to content

Latest commit

 

History

History
115 lines (99 loc) · 10.9 KB

PARITY.md

File metadata and controls

115 lines (99 loc) · 10.9 KB

Feature parity

Coverage against the Telegram feature catalog, computed from the registry: every operation declares the catalog ids it covers, and tlgr.parity subtracts them from the index shipped in the package. Regenerate with make parity.

covered is implemented today. acct% is covered plus waived — an id this build genuinely cannot cover, named in tlgr/data/parity_waivers.toml with the reason and the MTProto method that is missing. Ids whose feasibility is not-applicable or prohibited are excluded from the denominator once and never counted again.

catalog 2026-09-02 — 680 operations, 953 invocable paths

domain                        covered    req       %   acct%  ops
auth_sessions_security             89     89  100.0%  100.0%  45
bots_inline_payments              167    175   95.4%  100.0%  87
calls_voicechats                  133    133  100.0%  100.0%  56
contacts_users                    121    121  100.0%  100.0%  56
dialogs_chats                     146    146  100.0%  100.0%  83
groups_channels_admin             162    162  100.0%  100.0%  108
media_files                       143    143  100.0%  100.0%  75
messages_core                     167    167  100.0%  100.0%  61
polls_reactions_content           173    174   99.4%  100.0%  99
profile_settings_privacy          178    178  100.0%  100.0%  109
stories                           120    120  100.0%  100.0%  48
updates_sync_network              189    189  100.0%  100.0%  70

priority                      covered    req       %   acct%
P0                                178    178  100.0%  100.0%
P1                                377    379   99.5%  100.0%
P2                                606    610   99.3%  100.0%
P3                                627    630   99.5%  100.0%

TOTAL                            1788   1797   99.5%  100.0%
excluded: not-applicable 79, prohibited 40
uncovered: 9 (9 waived with a reason)

By domain

Domain Covered Required % Accounted % Ops
auth_sessions_security 89 89 100.0% 100.0% 45
bots_inline_payments 167 175 95.4% 100.0% 87
calls_voicechats 133 133 100.0% 100.0% 56
contacts_users 121 121 100.0% 100.0% 56
dialogs_chats 146 146 100.0% 100.0% 83
groups_channels_admin 162 162 100.0% 100.0% 108
media_files 143 143 100.0% 100.0% 75
messages_core 167 167 100.0% 100.0% 61
polls_reactions_content 173 174 99.4% 100.0% 99
profile_settings_privacy 178 178 100.0% 100.0% 109
stories 120 120 100.0% 100.0% 48
updates_sync_network 189 189 100.0% 100.0% 70

By priority

Priority Covered Required % Accounted %
P0 178 178 100.0% 100.0%
P1 377 379 99.5% 100.0%
P2 606 610 99.3% 100.0%
P3 627 630 99.5% 100.0%

Partial coverage

Catalog id Operation Why partial
auth.passport-authorize passport.form.get The request can be read in full; accepting it needs the Passport secure-value crypto Telethon does not provide (see passport authorize).
bots.business-invoke-with-connection bot.connection.invoke The wrapper is implemented on bot command send, bot press and inline send; wrapping an arbitrary command is refused with exit 13.
bots.rich-message-translate message.translate Rich-body translation is layer 229 and refused with NOT_SUPPORTED.
bots.rich-message-view message.get --rich is refused with NOT_SUPPORTED until Telethon carries layer 229.
calls.emoji-fingerprint call.get the four verification values are reported as indices into Telegram's 333-emoji table; tlgr does not bundle the table, and guessing it for a security check would be worse than not printing it
calls.migrate-to-conference call.invite the migration and the invitations are complete; creating the conference needs a signed e2e.chain block, which tlgr accepts (--block) but cannot build
conference.broadcast-nonce conference.send tlgr is the transport: it carries a payload an external E2E implementation produced, and cannot encrypt or sign one itself
conference.create-and-join conference.create creating the link is complete; joining at creation needs a signed e2e.chain block, which tlgr accepts (--block) but cannot build
conference.encrypted-message conference.send tlgr is the transport: it carries a payload an external E2E implementation produced, and cannot encrypt or sign one itself
conference.join-by-invite-message conference.join the request is built and sent; the signed join block it needs is an e2e.chain builder tlgr does not have and accepts from outside instead
conference.kick-participant conference.remove the request is built and sent; the removal block that rotates the shared key is an e2e.chain builder tlgr does not have and accepts from outside
conference.link-qr conference.get --qr returns the exact text to encode; drawing the code needs a QR encoder tlgr does not bundle
conference.prune-left conference.remove the request is built and sent; the removal block that rotates the shared key is an e2e.chain builder tlgr does not have and accepts from outside
game.play message.game.get A CLI cannot render an HTML5 game; --url is refused with NOT_SUPPORTED.
gift.craft-candidates gift.craft Listing the eligible ingredients needs payments.getStarGiftCraftCandidates, which Telethon 1.44 has no request class for; the flag refuses with exit 13.
gift.offer-resolve gift.offer.approve Declining is performed; accepting transfers an asset for money and is reported rather than done, like every other value transfer in tlgr.
gift.unique-value gift.unique.get The gift's own value_amount/value_currency are reported; the floor price and last sale need payments.getStarGiftValueInfo, absent from Telethon 1.44.
gift.upgrade-attributes gift.variant.list The upgrade preview is the sample the server offers; the exhaustive attribute table needs payments.getStarGiftAttributes, absent from Telethon 1.44.
gifts.purchase-offer gift.offer.approve Declining is performed; accepting transfers an asset for money and is reported rather than done, like every other value transfer in tlgr.
media.download-stream-stdout media.download The daemon owns the connection, so it cannot write bytes to the caller's terminal: --stdout spools the file and reports its path, and --play is refused rather than having the daemon spawn a player.
messages-core.ephemeral-messages message.delete --revert needs layer 229's ephemeral.* namespace and is refused.
messages-core.send-rich-message message.send A layer-229 rich body is refused with NOT_SUPPORTED: the pinned Telethon speaks layer 227 and cannot serialise inputRichMessage*.
passport.authorization passport.authorize The request is readable (passport form get); acceptance needs the Passport secure-value crypto and raises NOT_SUPPORTED.
premium.gift-to-user premium.gift.send The recipient, the length and the price are reported; signing the payment form is absent from tlgr's whole surface by policy.
richmsg.compose-ai message.compose Composing a rich body needs layer 229 and is refused with NOT_SUPPORTED.
richmsg.get message.get --rich is refused with NOT_SUPPORTED until Telethon carries layer 229.
richmsg.send message.send A layer-229 rich body is refused with NOT_SUPPORTED: the pinned Telethon speaks layer 227 and cannot serialise inputRichMessage*.
richmsg.tasks message.edit Checklist tasks live in a layer-229 rich body; --toggle-task is refused.
richmsg.translate message.translate Rich-body translation is layer 229 and refused with NOT_SUPPORTED.
stars.business-bot-transfer business.stars.transfer The price and the form are reported; signing the form is deliberately absent from tlgr's whole surface.
stars.subscription-refulfill stars.subscription.refulfill Whether the server would allow it, and what it would cost, are reported; the charge itself is absent from tlgr's surface by policy.
stories.live-join story.live.get The live story is reported; its group call is not reachable from layer 227's storyItem, and joining a broadcast needs a media engine tlgr does not have.
updates.invoke-business-connection bot.connection.invoke The wrapper is implemented on bot command send, bot press and inline send; wrapping an arbitrary command is refused with exit 13.

What this build cannot do

Every one of these is registered as a command that exits 13 (NOT_SUPPORTED) naming the method it needs, so "unavailable in this build" is a different answer from "no such command":

Catalog id Priority Feature Why
bots.ephemeral-callback-press P1 Press a button on an ephemeral bot message waived (layer-gap): ephemeral.getCallbackAnswer is a layer-229 method; bot press --ephemeral is registered and exits 13.
bots.ephemeral-command-send P1 Send an ephemeral bot command / reply to an ephemeral message waived (layer-gap): ephemeral.sendMessage is a layer-229 method; bot command send --ephemeral is registered and exits 13.
bots.ephemeral-message-send P2 Send / edit / delete an ephemeral message (bot side) waived (layer-gap): ephemeral.sendMessage is a layer-229 method; the command is registered and exits 13.
bots.rich-message-buttons P2 Buttons inside a rich bot message waived (layer-gap): The rich-message keyboard constructors arrived in layer 229; tlgr refuses rather than guessing at a constructor id.
bots.welcome-messages-manage P2 Add / edit / delete a chat's welcome messages waived (layer-gap): ephemeral.sendMessage / ephemeral.editMessage are layer-229 methods; chat welcome set is registered and exits 13.
bots.welcome-messages-view P2 Bot welcome messages in an empty chat waived (layer-gap): ephemeral.getWelcomeMessages is a layer-229 method; chat welcome list is registered and exits 13.
bots.chat-join-webview P3 Guard-bot join webview (chat approval mini app) waived (absent-method): messages.requestChatJoinWebView is absent from Telethon 1.44; webapp open --join-query-id is registered and exits 13.
bots.ephemeral-report P3 Report an ephemeral bot message waived (layer-gap): ephemeral.report is a layer-229 method; the command is registered and exits 13.
gift.can-send P3 Can I send this gift? waived (absent-method): payments.canSendStarGift is absent from Telethon 1.44; gift catalog --until is registered and exits 13, and the rest of the catalogue still reads.