From d0a2006bbf6e19ab28b4f3df52ec9db0c6965844 Mon Sep 17 00:00:00 2001 From: npub1t6rfa6zdpy7psx6pt6txjkkplu8rwlzsrwu0d5ygpdz9uqcxnrwqphzvma <5e869ee84d093c181b415e96695ac1ff0e377c501bb8f6d0880b445e030698dc@alexmoore.communities.buzz.xyz> Date: Sat, 1 Aug 2026 18:01:12 -0400 Subject: [PATCH 1/4] =?UTF-8?q?feat(kanban):=20Phase=201=20=E2=80=94=20kin?= =?UTF-8?q?ds=2031001/31002/31003=20+=20boards/cards=20CLI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Implements Phase 1 of the Kanban board: adds kind constants and a base-36 order-preserving rank codec in buzz-core, board/card/move builders in buzz-sdk, the `buzz boards` / `buzz cards` CLI surface, and relay ingest scope for all three kinds. Kinds (NIP-33 parameterized-replaceable, owner-authored, global-only): - 31001 KIND_KANBAN_BOARD: ordered columns live on the board event. - 31002 KIND_KANBAN_CARD: single `column` + `rank`; a move replaces the card event, giving last-write-wins via NIP-33. - 31003 KIND_KANBAN_CARD_MOVE: optional non-replaceable audit trail. buzz-core - kind.rs: add KIND_KANBAN_BOARD=31001, KIND_KANBAN_CARD=31002, KIND_KANBAN_CARD_MOVE=31003. - kanban.rs: base-36 order-preserving fractional rank codec with strict betweenness (no trailing-0 invariant so string compare == numeric order). Unit-tested incl. a 5,000-insert fuzz. buzz-sdk - builders.rs: BoardMeta/build_kanban_board, CardMeta/build_kanban_card, and a move-audit builder, with `h`/`invite` share tags and NIP-32 namespaced `["l",