Files
ngit-grasp/docs
DanConwayDev d0a23caf5c feat(nip34): parse indexed M/m role tags as the primary maintainer listing
Follow the indexed repository roles format from NIP-34 (nips 986edd1):
`M` (lead) and `m` (co-maintainer) tags are now the primary maintainer
listing, and their presence means the deprecated `maintainers` tag is
ignored entirely. The lead / co-maintainer distinction carries no meaning
for this service, so both collapse into one maintainer set.

Role tags may record history as alternating start/end timestamps; a tag
is currently active when it has fewer than four elements or an odd number
of elements. Ended entries are ignored entirely: role history is only
consulted to conclude that a pubkey is no longer a maintainer, never to
grant time-scoped retroactive authority over historic events. A pubkey
may appear in one `M` and one `m` tag to record a role transition and
remains a maintainer while either entry is active; a second tag under
the same letter is malformed and rejects the announcement.

RepositoryAnnouncement::listed_maintainers() - already the single source
for the listed maintainer set since the reciprocal-membership commit -
now prefers active role-tag entries over the deprecated tag, so state
authorization, replacement detection, the maintainer exception, sync
discovery and the dependency walkers all pick up the new format through
the sites switched to it here. Two refinements to membership follow from
the format:

- An announcement using role tags acknowledges its author via an active
  self-entry, or implicitly: per NIP-34 an author who appears in no role
  tag is a maintainer for the repository's entire history. Only an ended
  self-entry means the member left, which takes precedence over
  assignments in other announcements and is distinct from merely being
  invited (author_has_left).
- A `u` (subordinate fork) tag has no effect on maintainership: the
  author of a role-less announcement asserts maintainership with or
  without it.

Correctness assumption: authorization remains namespace-scoped, so the
owner of a repository namespace stays authorized for it regardless of
their own role history; role history only ends the authority of listed
maintainers. Conflicting listings across
announcements resolve as the union of confirmed members' active
listings, matching the NIP's current-role rule; the NIP's owner-first
precedence applies only to conflicting records of past roles, which
this service never evaluates.

Scope deliberately excluded: the moderator role tag (`o`) is handled in
a follow-up commit.

Validation: nostr::events and git::authorization unit tests,
state_authorization suite (including new role-tag acceptance and
ended-role rejection tests) and the sync invitation tests all pass.
2026-08-19 11:29:30 +00:00
..
2025-11-04 10:25:53 +00:00

ngit-grasp Documentation

Welcome to the ngit-grasp documentation! We use the Diátaxis framework to organize our documentation into four types, each serving a different purpose.

                    PRACTICAL          THEORETICAL
                    ─────────          ───────────
                    
LEARNING      │   Tutorials    │    Explanation   │
              │                │                  │
              │  Getting       │   Architecture   │
              │  Started       │   Decisions      │
              │                │                  │
              ├────────────────┼──────────────────┤
              │                │                  │
WORKING       │  How-To        │    Reference     │
              │  Guides        │                  │
              │                │   API Docs       │
              │  Deployment    │   Protocols      │
              │  Testing       │                  │
              │                │                  │

📚 Documentation Types

🎓 Tutorials - Learning by Doing

Purpose: Learn the basics through practical steps
For: Newcomers getting started
Style: Step-by-step lessons with guaranteed outcomes

🔧 How-To Guides - Solving Problems

Purpose: Accomplish specific tasks
For: Users with basic knowledge solving real problems
Style: Practical recipes and solutions

📖 Reference - Technical Information

Purpose: Look up technical details
For: Users who know what they're looking for
Style: Dry, factual, comprehensive

💡 Explanation - Understanding Concepts

Purpose: Understand the "why" and design decisions
For: Users wanting deeper understanding
Style: Discussion, context, alternatives


🚀 Quick Start Paths

I'm brand new to ngit-grasp

  1. Read README.md for project overview
  2. Follow Getting Started Tutorial
  3. Understand Architecture Overview

I want to deploy ngit-grasp

  1. Review Configuration Reference
  2. Follow Deployment How-To
  3. Set up monitoring and backups

I want to develop on ngit-grasp

  1. Follow Getting Started Tutorial
  2. Read Architecture Overview
  3. Check Nix Flakes How-To
  4. Review Test Strategy

I want to understand the design

  1. Read Inline Authorization Explanation
  2. Review Design Decisions
  3. Compare with ngit-relay Comparison

I'm looking for specific information


📂 Additional Resources

Archive

Historical session notes and completed work. Useful for understanding project evolution but not required reading.

Learnings

DEPRECATED - Being migrated to Diátaxis structure:

  • Gotchas → How-To Guides
  • Patterns → Reference or Explanation
  • Notes → Appropriate category

🤝 Contributing to Documentation

When adding documentation, ask yourself:

Is it a tutorial?

  • Does it teach a beginner?
  • Is it a complete lesson with guaranteed outcome?
  • → Add to tutorials/

Is it a how-to guide?

  • Does it solve a specific problem?
  • Is it a recipe for accomplishing a task?
  • → Add to how-to/

Is it reference material?

  • Is it technical information?
  • Will people look it up when needed?
  • → Add to reference/

Is it explanation?

  • Does it explain "why"?
  • Does it discuss alternatives or design?
  • → Add to explanation/

See Diátaxis documentation for more guidance.


📊 Project Status

ALPHA - Under active development. Core functionality working, API may change.

Completed

  • ✅ grasp-audit compliance testing tool
  • ✅ Nix flake development environment
  • ✅ nostr-sdk 0.43 upgrade
  • ✅ Documentation restructure (Diátaxis)

In Progress

  • 🔄 Core ngit-grasp server implementation
  • 🔄 GRASP-01 compliance

Planned

  • 🔜 GRASP-02 (Proactive Sync)
  • 🔜 GRASP-05 (Archive)


Documentation structure based on Diátaxis
Last updated: November 4, 2025