Skip to content

Spec: Complete Tier A+B API surface and maintenance cleanup #154

Description

@AustinKelsay

Problem Statement

After multiple cleanup waves on staging, triage still contains eleven shipped-but-open July issues, agent run dumps drown durable ledgers, NIP-42 lacks a README, dual Public Facades confuse callers (NIP-57 ZapClient vs NostrZapClient, NIP-46 Simple vs Full), overlapping NIP-46 validator names risk silent security drift against canonical validators, and root/web entries still dump types via export *.

Solution

Deliver eight AFK tracer-bullet tickets on one feature branch (feature/cleanup-tier-ab-api-surface) against staging. Preserve every Compatibility Alias through 0.x; document planned 1.0 removals; deprecate dual facades toward one canonical Public Facade each; rename/align NIP-46 validators without removing old names yet; replace type star-exports with an explicit allowlist that still exports the same public names.

User Stories

  1. As a maintainer, I want shipped July issues closed, so triage no longer invites duplicate work.
  2. As a consumer, I want a published 1.0 kill-list, so Compatibility Alias removals are predictable.
  3. As an agent, I want agent-run dumps archived behind an index, so ledgers remain discoverable.
  4. As a NIP-42 integrator, I want a README for the auth helpers, so the module matches other NIPs.
  5. As a zap consumer, I want one canonical Public Facade (NostrZapClient), with ZapClient clearly deprecated.
  6. As a remote-signing consumer, I want Full NIP-46 marked production and Simple marked demo/compat + deprecated for 1.0.
  7. As a security maintainer, I want NIP-46 validators named distinctly and private-key checks routed through canonical key validation.
  8. As a TypeScript consumer, I want an explicit root/web type allowlist that preserves 0.x names while making the supported surface intentional.

Implementation Decisions

  • Base: staging. One branch for the whole feature.
  • ADR 0003 records Public Facade + Compatibility Alias removal planning.
  • ADR 0002 still governs logger aliases: no removals in this PR.
  • NostrZapClient is canonical; deprecate ZapClient; export both only via nip57 barrel for root.
  • NostrRemoteSigner* is the production Public Facade; deprecate SimpleNIP46* for 1.0; stop growing Simple.
  • NIP-46 boolean validators get NIP-specific names; old names remain deprecated aliases until 1.0.
  • Private-key boolean validation in NIP-46 routes through canonical key-validation semantics.
  • Root and web replace export * from types/nostr with explicit exports of the same public names (including Compatibility Aliases).
  • Archive pre-ledger session/review/coderabbit dumps under docs/agents/runs/archive/; keep *-ledger.md, final audits, and README.md.

Testing Decisions / Seams

Confirmed under owner full-autonomy grant:

  • Public deprecation markers and README guidance (type/JSDoc/@deprecated).
  • Export/typecheck: Node + web entries still expose listed names; pack/verify green.
  • NIP-46 validator public behavior through existing validator/input-validation suites after rename/aliases.
  • NIP-57 public client suites still green for both facades.
  • Command/package verifiers green after archive + docs changes.
  • No private-shape casts; prefer public barrels and documented Compatibility Aliases.

Out of Scope

  • Removing Compatibility Aliases (1.0 only).
  • Tier C god-module splits (relay.ts, nostr.ts, NIP-47 facade splits).
  • Enum→map migrations, class→function mass refactors.
  • Promoting/releasing to main / npm.

Alignment

  • Owner granted full autonomy to lock seams, ticket graph, and product decisions.
  • Glossary: Public Facade, Compatibility Alias added to CONTEXT.md.

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

    ready-for-agentMatt Pocock skill state: ready-for-agent

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions