board: generalize the trello command to Trello + xy boards #106

Merged
pecheny merged 1 commit from board-xy-integration into main 2026-06-29 17:48:18 +00:00
Owner

Renames the trello command to board (trello kept as an alias) and adds support for xy boards (https://xy.pecheny.me) alongside Trello.

xy is end-to-end encrypted and exposes a Trello-compatible API, so the existing download/upload pipeline works once ciphertext fields are decrypted locally with the board passphrase.

What changed

  • trello.pyboard.py (gui_trello*/cmdtrello*gui_board*/cmdboard*; gui_trello kept as a back-compat alias). Service is detected from the board URL: trello.com/b/<id> vs <xy-host>/board/<id>.
  • board_config.py: board-URL parsing + service detection; per-host token store ~/.chgksuite/.board_tokens.toml (list of {host, token}) with a one-time migration of the legacy .trello_token (folded in, then deleted); per-folder board_metadata.toml (visible; board_url + passphrase for xy) that supersedes the legacy bare-id .board_id — migrated into it on the first board run for that folder, then deleted.
  • xy_crypto.py: a port of xy's crypto.js envelope + key lifecycle (scrypt KEK + AES-256-GCM) to decrypt board/list/card/label fields and encrypt on upload. Adds the cryptography dependency.
  • CLI: board download <folder>; board upload <board_url> (renamed from board_id); board token [board_service_url] (default https://trello.com) — Trello OAuth flow, or for xy points the user at {xy_url}/profile/tokens and stores the pasted token.

Tests

Offline: a known-answer crypto vector produced by xy's own crypto.js, field round-trip, URL parsing, token-store + legacy migrations (.trello_token and .board_id), metadata I/O. Also verified end-to-end against a live xy server (download decrypts a real encrypted board to plaintext .4s via a visible board_metadata.toml).

Requires the matching xy change exposing keymeta over the token API (xy MR !51).

🤖 Generated with Claude Code

Renames the `trello` command to `board` (`trello` kept as an alias) and adds support for **xy** boards (https://xy.pecheny.me) alongside Trello. xy is end-to-end encrypted and exposes a Trello-compatible API, so the existing download/upload pipeline works once ciphertext fields are decrypted locally with the board passphrase. ### What changed - **`trello.py` → `board.py`** (`gui_trello*`/`cmdtrello*` → `gui_board*`/`cmdboard*`; `gui_trello` kept as a back-compat alias). Service is detected from the board URL: `trello.com/b/<id>` vs `<xy-host>/board/<id>`. - **`board_config.py`**: board-URL parsing + service detection; per-host token store `~/.chgksuite/.board_tokens.toml` (list of `{host, token}`) with a **one-time migration of the legacy `.trello_token`** (folded in, then deleted); per-folder **`board_metadata.toml`** (visible; `board_url` + `passphrase` for xy) that **supersedes the legacy bare-id `.board_id`** — migrated into it on the first `board` run for that folder, then deleted. - **`xy_crypto.py`**: a port of xy's `crypto.js` envelope + key lifecycle (scrypt KEK + AES-256-GCM) to decrypt board/list/card/label fields and encrypt on upload. Adds the `cryptography` dependency. - **CLI**: `board download <folder>`; `board upload <board_url>` (renamed from `board_id`); `board token [board_service_url]` (default `https://trello.com`) — Trello OAuth flow, or for xy points the user at `{xy_url}/profile/tokens` and stores the pasted token. ### Tests Offline: a known-answer crypto vector produced by xy's own `crypto.js`, field round-trip, URL parsing, token-store + legacy migrations (`.trello_token` and `.board_id`), metadata I/O. Also verified end-to-end against a live xy server (download decrypts a real encrypted board to plaintext .4s via a visible `board_metadata.toml`). Requires the matching xy change exposing `keymeta` over the token API (xy MR !51). 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Author
Owner

added 1 commit

  • 038a1068 - board: generalize the trello command to any board service (Trello + xy)

Compare with previous version

added 1 commit <ul><li>038a1068 - board: generalize the trello command to any board service (Trello + xy)</li></ul> [Compare with previous version](/alexander-pecheny/chgksuite/-/merge_requests/56/diffs?diff_id=1870979012&start_sha=1fa8af5e87f9cdf222d188aa816d89277d759dbb)
Author
Owner

changed the description

changed the description
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
pecheny/chgksuite!106
No description provided.