Skip to content

The Glyph timelock feature has no production entry point — 684 lines, 3 test files, nothing calls it (crypto half resolved in #560) #556

Description

@Zyrtnin

Surfaced by closing a hole in test_reachability_shipped_callers.py (#553): __all__ entries were being counted as references, so any symbol could be made to look reachable by exporting it. Closing that exposed 26 symbols. Eleven of them are one feature.

What is unreachable

module lines
glyph/timelock.py 290
glyph/timelock_reveal_tx.py 394
crypto/aead.py 220
crypto/kem.py 207

Internally connected — kem imports aead, timelock_reveal_tx imports timelock — and not reached from anywhere outside itself.

Flagged symbols: add_timelock_to_metadata, get_unlock_remaining, is_unlocked, verify_cek_reveal, create_reveal_proof, parse_reveal_proof_script, validate_reveal_proof, encrypt_chunked, decrypt_chunked, wrap_cek_x25519, unwrap_cek_x25519.

The only outside reference is prose

glyph/encrypted_content.py:236:

Construct via :func:pyrxd.glyph.timelock.build_timelock_mint

A docstring, not a call. build_timelock_mint has no caller either, so the mint side is as unreachable as the reveal side. crypto.kem has zero importers anywhere.

Why this matters more than an unused module

There are five test filestest_glyph_timelock.py, test_glyph_timelock_e2e.py, test_glyph_timelock_reveal_tx.py, test_crypto_aead.py, test_crypto_kem.py. The feature is built and covered, so it reads as shipped. What it lacks is any path a user can reach: no CLI command, no GlyphClient method, no export in the curated pyrxd namespace.

That is the reachability class at subsystem scale — "a test that constructs the input by hand proves the mechanism; at least one test must reach the code through the production entry point" — and it stayed invisible because the scanner's registry rule swallowed __all__.

Not proposing a fix

Three defensible outcomes and the choice is a product one, not a code one:

  1. Wire it — a CLI command and/or a GlyphClient method, which is what the docstring already promises users.
  2. Export it — deliberate __init__ exports if it is an SDK-only surface, which also clears the allowlist entries.
  3. Delete it — if timelocked content was superseded, ~1,100 lines and five test files stop being maintained.

Recorded in the allowlist as debt in the meantime, deliberately loud. crypto/aead and crypto/kem may deserve separate treatment: they are general primitives that could have callers beyond this feature.

Activity

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions