An encrypted personal cloud built on the AT Protocol.

Add crosslink-issue-renderer submodule and issue site deployment

- Add tools/crosslink-issue-renderer as git submodule
- Pre-commit hook links CHANGELOG.md issue references to
https://issues.opake.app
- Post-commit hook renders issue site and uploads via rclone on
crosslink/hub commits
- Encourage markdown in crosslink issue comments

sans-self.org 92db1823 556ad470

Waiting for spindle ...
+61 -55
+2
.crosslink/rules/tracking-normal.md
··· 78 78 79 79 Low priority issues don't need typed comments — the diff tells the story. 80 80 81 + Use markdown in comment content — comments are rendered as HTML in the issue tracker. 82 + 81 83 ### Priority Guide 82 84 - `critical`: Blocking other work, security issue, production down 83 85 - `high`: User explicitly requested, core functionality
+3
.gitmodules
··· 1 + [submodule "tools/crosslink-issue-renderer"] 2 + path = tools/crosslink-issue-renderer 3 + url = git@knot.sans-self.org:sans-self.org/crosslink-issue-renderer
+56 -55
CHANGELOG.md
··· 7 7 ## [Unreleased] 8 8 9 9 ### Security 10 - - Fix ContentKey Debug impl to redact secret bytes (#49) 11 - - Add file permission hardening for sensitive config and key files (#8) 12 - - Remove bearer token authentication fallback from AppView (#26) 10 + - Fix ContentKey Debug impl to redact secret bytes [#49](https://issues.opake.app/issues/49.html) 11 + - Add file permission hardening for sensitive config and key files [#8](https://issues.opake.app/issues/8.html) 12 + - Remove bearer token authentication fallback from AppView [#26](https://issues.opake.app/issues/26.html) 13 13 14 14 ### Added 15 - - Migrate from chainlink to crosslink and slim project docs (#137) 16 - - Update docs for security hardening and opake-derive crate (#4) 17 - - Add inbox CLI command for discovering shared grants via appview (#7) 18 - - Audit workspace dependencies for consolidation and upgrades (#25) 19 - - Add AppView production readiness: clap, DID auth, XDG, health, docs (#34) 20 - - Update docs to reflect module directory restructuring (#40) 21 - - Add verbose flags for CLI debug output (#43) 22 - - Add keyring rotation history to preserve member access to pre-rotation documents (#48) 23 - - Add cross-PDS download for keyring members (#51) 24 - - Add keyring-based group sharing (#119) 25 - - Add keyring-based group sharing for multi-user access control (#60) 26 - - Add shared command to list outgoing grants (#121) 27 - - Add MermaidJS flow diagrams and restructure documentation (#63) 28 - - Improve naming consistency and split documents/download.rs (#64) 29 - - Black-box test the full sharing workflow across accounts (#67) 30 - - Add grant-based cross-PDS download for shared files (#66) 31 - - Auto-publish encryption public key on login (#69) 32 - - Add resolve command for DID resolution and public key discovery (#124) 33 - - Add share command to grant document access to another DID (#123) 34 - - Add revoke command to delete grant records (#122) 35 - - Add account management commands and --as flag (#75) 36 - - Improve README with pronunciation guide and formatting polish (#87) 37 - - Add automatic token refresh using refresh_jwt on expired sessions (#101) 38 - - Add filename resolution for rm command (#93) 39 - - Add filename resolution for download command (#94) 15 + - Add crosslink-issue-renderer submodule and CI/CD pipeline [#141](https://issues.opake.app/issues/141.html) 16 + - Migrate from chainlink to crosslink and slim project docs [#137](https://issues.opake.app/issues/137.html) 17 + - Update docs for security hardening and opake-derive crate [#4](https://issues.opake.app/issues/4.html) 18 + - Add inbox CLI command for discovering shared grants via appview [#7](https://issues.opake.app/issues/7.html) 19 + - Audit workspace dependencies for consolidation and upgrades [#25](https://issues.opake.app/issues/25.html) 20 + - Add AppView production readiness: clap, DID auth, XDG, health, docs [#34](https://issues.opake.app/issues/34.html) 21 + - Update docs to reflect module directory restructuring [#40](https://issues.opake.app/issues/40.html) 22 + - Add verbose flags for CLI debug output [#43](https://issues.opake.app/issues/43.html) 23 + - Add keyring rotation history to preserve member access to pre-rotation documents [#48](https://issues.opake.app/issues/48.html) 24 + - Add cross-PDS download for keyring members [#51](https://issues.opake.app/issues/51.html) 25 + - Add keyring-based group sharing [#119](https://issues.opake.app/issues/119.html) 26 + - Add keyring-based group sharing for multi-user access control [#60](https://issues.opake.app/issues/60.html) 27 + - Add shared command to list outgoing grants [#121](https://issues.opake.app/issues/121.html) 28 + - Add MermaidJS flow diagrams and restructure documentation [#63](https://issues.opake.app/issues/63.html) 29 + - Improve naming consistency and split documents/download.rs [#64](https://issues.opake.app/issues/64.html) 30 + - Black-box test the full sharing workflow across accounts [#67](https://issues.opake.app/issues/67.html) 31 + - Add grant-based cross-PDS download for shared files [#66](https://issues.opake.app/issues/66.html) 32 + - Auto-publish encryption public key on login [#69](https://issues.opake.app/issues/69.html) 33 + - Add resolve command for DID resolution and public key discovery [#124](https://issues.opake.app/issues/124.html) 34 + - Add share command to grant document access to another DID [#123](https://issues.opake.app/issues/123.html) 35 + - Add revoke command to delete grant records [#122](https://issues.opake.app/issues/122.html) 36 + - Add account management commands and --as flag [#75](https://issues.opake.app/issues/75.html) 37 + - Improve README with pronunciation guide and formatting polish [#87](https://issues.opake.app/issues/87.html) 38 + - Add automatic token refresh using refresh_jwt on expired sessions [#101](https://issues.opake.app/issues/101.html) 39 + - Add filename resolution for rm command [#93](https://issues.opake.app/issues/93.html) 40 + - Add filename resolution for download command [#94](https://issues.opake.app/issues/94.html) 40 41 - Add MockTransport test infrastructure with FIFO response queue 41 42 - Add download command tests with full crypto roundtrip verification 42 - - Update login command to read password from stdin (#112) 43 + - Update login command to read password from stdin [#112](https://issues.opake.app/issues/112.html) 43 44 44 45 ### Fixed 45 - - Fix bugs found during black-box integration testing of sharing workflow (#70) 46 - - Fix base64 padding mismatch when decoding PDS $bytes fields (#68) 47 - - Fix missing HTTP status checks in XRPC client (#104) 46 + - Fix bugs found during black-box integration testing of sharing workflow [#70](https://issues.opake.app/issues/70.html) 47 + - Fix base64 padding mismatch when decoding PDS $bytes fields [#68](https://issues.opake.app/issues/68.html) 48 + - Fix missing HTTP status checks in XRPC client [#104](https://issues.opake.app/issues/104.html) 48 49 49 50 ### Changed 50 - - Update docs to reflect keyring rotation history (#46) 51 - - Add keyring member management (add-member, remove-member) (#56) 52 - - Add CLI keyring commands and local group key store (#57) 53 - - Add keyrings core module with create and list operations (#58) 54 - - Implement symmetric key wrapping primitives in crypto.rs (#59) 55 - - Add automatic public key publishing on login (#77) 56 - - Replace raw [u8; 32] with X25519PublicKey/X25519PrivateKey type aliases (#72) 57 - - Split client.rs into module directory for transport, xrpc, and DID resolution (#71) 58 - - Remove --permissions flag from share command (#73) 59 - - Add per-account session and identity persistence (#84) 60 - - Add multi-account config struct and per-account storage layout (#85) 61 - - Add publicKey lexicon and PublicKeyRecord struct (#80) 62 - - Add document deletion via com.atproto.repo.deleteRecord (#127) 63 - - Add document listing via com.atproto.repo.listRecords (#128) 51 + - Update docs to reflect keyring rotation history [#46](https://issues.opake.app/issues/46.html) 52 + - Add keyring member management (add-member, remove-member) [#56](https://issues.opake.app/issues/56.html) 53 + - Add CLI keyring commands and local group key store [#57](https://issues.opake.app/issues/57.html) 54 + - Add keyrings core module with create and list operations [#58](https://issues.opake.app/issues/58.html) 55 + - Implement symmetric key wrapping primitives in crypto.rs [#59](https://issues.opake.app/issues/59.html) 56 + - Add automatic public key publishing on login [#77](https://issues.opake.app/issues/77.html) 57 + - Replace raw [u8; 32] with X25519PublicKey/X25519PrivateKey type aliases [#72](https://issues.opake.app/issues/72.html) 58 + - Split client.rs into module directory for transport, xrpc, and DID resolution [#71](https://issues.opake.app/issues/71.html) 59 + - Remove --permissions flag from share command [#73](https://issues.opake.app/issues/73.html) 60 + - Add per-account session and identity persistence [#84](https://issues.opake.app/issues/84.html) 61 + - Add multi-account config struct and per-account storage layout [#85](https://issues.opake.app/issues/85.html) 62 + - Add publicKey lexicon and PublicKeyRecord struct [#80](https://issues.opake.app/issues/80.html) 63 + - Add document deletion via com.atproto.repo.deleteRecord [#127](https://issues.opake.app/issues/127.html) 64 + - Add document listing via com.atproto.repo.listRecords [#128](https://issues.opake.app/issues/128.html) 64 65 - Extract AT Protocol primitives into dedicated atproto module 65 66 - Consolidate XRPC response checking into send_checked method 66 - - Add file download with client-side decryption (#129) 67 - - Update outdated dependencies (reqwest 0.13, toml) (#106) 68 - - Test upload command against real PDS (#107) 69 - - Add file upload with client-side encryption (#130) 70 - - Add local keystore for session and key persistence (#126) 71 - - Add asymmetric key wrapping (ECDH-ES+A256KW) (#131) 72 - - Add AES-256-GCM content encryption and decryption (#132) 73 - - Fix WASM compilation for opake-core by enabling getrandom js feature (#108) 74 - - Add PDS authentication via com.atproto.server.createSession (#133) 67 + - Add file download with client-side decryption [#129](https://issues.opake.app/issues/129.html) 68 + - Update outdated dependencies (reqwest 0.13, toml) [#106](https://issues.opake.app/issues/106.html) 69 + - Test upload command against real PDS [#107](https://issues.opake.app/issues/107.html) 70 + - Add file upload with client-side encryption [#130](https://issues.opake.app/issues/130.html) 71 + - Add local keystore for session and key persistence [#126](https://issues.opake.app/issues/126.html) 72 + - Add asymmetric key wrapping (ECDH-ES+A256KW) [#131](https://issues.opake.app/issues/131.html) 73 + - Add AES-256-GCM content encryption and decryption [#132](https://issues.opake.app/issues/132.html) 74 + - Fix WASM compilation for opake-core by enabling getrandom js feature [#108](https://issues.opake.app/issues/108.html) 75 + - Add PDS authentication via com.atproto.server.createSession [#133](https://issues.opake.app/issues/133.html)