@orangecheck/legal 0.7.23 → 0.7.28

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -63,7 +63,11 @@ var PROTOCOL_LINKED_SITES = [
63
63
  "agent",
64
64
  "pledge",
65
65
  "docs",
66
- "analytics"
66
+ "analytics",
67
+ "chat",
68
+ "cosign",
69
+ "btc",
70
+ "globe"
67
71
  ];
68
72
  function getSiteContext(slug) {
69
73
  const ctx = LEGAL_SITES[slug];
@@ -464,7 +468,7 @@ var privacyChanges = {
464
468
  };
465
469
 
466
470
  // src/content/protocol.ts
467
- var COMMERCIAL_SCOPE_NOTE = "These Terms govern the **non-custodial** OrangeCheck family: [ochk.io](https://ochk.io), including its documentation at [ochk.io/docs](https://ochk.io/docs), and the verb sites \u2014 OC Attest, OC Lock, OC Vote, OC Stamp, OC Agent, OC Pledge. The commercial products **ochk.app** and **vault.ochk.io** each publish their own Terms; these Terms do not govern your use of those products.";
471
+ var COMMERCIAL_SCOPE_NOTE = "These Terms govern the **non-custodial** OrangeCheck family: [ochk.io](https://ochk.io), including its documentation at [ochk.io/docs](https://ochk.io/docs); the verb sites \u2014 OC Attest, OC Lock, OC Vote, OC Stamp, OC Agent, OC Pledge; and [chat.ochk.io](https://chat.ochk.io), [cosign.ochk.io](https://cosign.ochk.io), [btc.ochk.io](https://btc.ochk.io) and [globe.ochk.io](https://globe.ochk.io). The commercial products **ochk.app** and **vault.ochk.io** each publish their own Terms; these Terms do not govern your use of those products.";
468
472
  var terms = {
469
473
  kind: "terms",
470
474
  eyebrow: "terms",
@@ -473,7 +477,7 @@ var terms = {
473
477
  metaTitle: "Terms of Service \u2014 OrangeCheck",
474
478
  metaDescription: "The terms and conditions for using OrangeCheck. Non-custodial service provided as-is. You are responsible for your wallet and private keys.",
475
479
  effective: "2025-09-30",
476
- updated: "2026-10-26",
480
+ updated: "2026-10-29",
477
481
  preamble: [
478
482
  {
479
483
  kind: "callout",
@@ -493,6 +497,10 @@ var terms = {
493
497
  kind: "para",
494
498
  text: "OrangeCheck is a family of **non-custodial** protocols and reference tools that let you create cryptographic proof-of-stake artifacts using Bitcoin message signatures (BIP-322), bind self-asserted handles to them, optionally publish them to decentralized Nostr relays, and discover and verify artifacts created by others."
495
499
  },
500
+ {
501
+ kind: "para",
502
+ text: "OrangeCheck also runs **chat.ochk.io**, an end-to-end-encrypted messenger; **cosign.ochk.io**, where builders post projects and others join or back them, with any payment going directly from one person to another; **btc.ochk.io**, a read-only Bitcoin market desk; and **globe.ochk.io**, a read-only view of the Bitcoin network."
503
+ },
496
504
  { kind: "subhead", text: "what orangecheck does not" },
497
505
  {
498
506
  kind: "bullets",
@@ -578,6 +586,10 @@ var terms = {
578
586
  k: "opentimestamps calendars",
579
587
  v: "when you claim an OC Chat @handle, your browser sends the claim's fingerprint (a SHA-256 hash) to the OpenTimestamps calendars at alice.btc.calendar.opentimestamps.org, bob.btc.calendar.opentimestamps.org and finney.calendar.eternitywall.com, and reads your address's coins and block headers from mempool.space; each of these sees your IP address and when you asked."
580
588
  },
589
+ {
590
+ k: "payments between people",
591
+ v: "postage on chat.ochk.io, and backing, zaps and bounties on cosign.ochk.io, are Lightning payments you make directly to the other person's wallet. OrangeCheck never holds them, cannot reverse them, and is not a party to them."
592
+ },
581
593
  {
582
594
  k: "nostr network",
583
595
  v: "decentralized relays operated by third parties. published data is replicated outside our control and may persist indefinitely."
@@ -605,7 +617,7 @@ var terms = {
605
617
  blocks: [
606
618
  {
607
619
  kind: "para",
608
- text: "The protocol sites and documentation are free to use. You are responsible for Bitcoin network fees on any transactions you initiate and for your own ISP and wallet-provider costs. Paid functionality, if introduced, will be announced with advance notice; the commercial products **ochk.app** and **vault.ochk.io** carry their own pricing and Terms."
620
+ text: "The protocol sites, the documentation, cosign.ochk.io, btc.ochk.io and globe.ochk.io are free to use, and so is chat.ochk.io. chat.ochk.io also lists an optional paid plan, Personal: when its checkout is open, you pay the price shown before you pay, in advance, for a fixed period, and it does not renew on its own. You are responsible for Bitcoin network fees on any transactions you initiate and for your own ISP and wallet-provider costs. Other paid functionality, if introduced, will be announced with advance notice; the commercial products **ochk.app** and **vault.ochk.io** carry their own pricing and Terms."
609
621
  }
610
622
  ]
611
623
  },
@@ -622,7 +634,7 @@ var terms = {
622
634
  { kind: "subhead", text: "not financial, legal, or compliance advice" },
623
635
  {
624
636
  kind: "para",
625
- text: "Nothing OrangeCheck provides \u2014 artifacts, metrics, scores, identity bindings, or other output \u2014 is financial, investment, legal, tax, KYC, AML, sanctions, or regulatory-compliance advice. Obtain independent professional advice before relying on the Service for any decision."
637
+ text: "Nothing OrangeCheck provides \u2014 artifacts, metrics, scores, identity bindings, btc.ochk.io's market data, charts and written market commentary (some of it written by an AI model), or other output \u2014 is financial, investment, legal, tax, KYC, AML, sanctions, or regulatory-compliance advice. Obtain independent professional advice before relying on the Service for any decision."
626
638
  },
627
639
  { kind: "subhead", text: "regulatory status \xB7 not a money services business" },
628
640
  {
@@ -662,11 +674,24 @@ var privacy = {
662
674
  metaTitle: "Privacy Policy \u2014 OrangeCheck",
663
675
  metaDescription: "How OrangeCheck handles data and privacy. Non-custodial by design, minimal data collection, no account required, privacy-preserving analytics only.",
664
676
  effective: "2025-09-30",
665
- updated: "2026-10-26",
677
+ updated: "2026-10-31",
666
678
  preamble: [
667
679
  {
668
680
  kind: "callout",
669
- text: "This policy covers the **non-custodial** OrangeCheck family \u2014 [ochk.io](https://ochk.io), including its documentation at [ochk.io/docs](https://ochk.io/docs), and the six verb sites. The commercial products ochk.app and vault.ochk.io publish their own privacy policies covering the additional data their products handle."
681
+ text: "**What changed, 8 to 31 October 2026.** We corrected this policy where it did not say what is kept or who sees it. Newest first; the [changelog](https://github.com/orangecheck/oc-packages/blob/main/legal/CHANGELOG.md) lists every change."
682
+ },
683
+ {
684
+ kind: "bullets",
685
+ items: [
686
+ { k: "31 October", v: "the owner consoles, analytics.ochk.io and vault.ochk.io's, show every email address masked, refuse an email as a search or action subject, and show a whole address only after a written reason is recorded." },
687
+ { k: "29 October", v: "an account also keeps its Google or GitHub id, the roster id that links accounts signed in from one browser, the site you signed up through, a coin that backs it (its address, outpoint and amount, and the message you signed), and OC Chat device vouches and revocations, which are also published to Nostr relays. relay.ochk.io keeps each record with a pseudonym of the sender's IP address, replaced each UTC day, and never the address itself. Our operators' first-sign-in email names only your did:oc and the kind of sign-in. The policy says what chat, cosign, btc and globe keep, who completes a deletion, and what stays." },
688
+ { k: "26 October", v: "a session row keeps no IP address, and the sign-in log keeps it for 90 days. relay.ochk.io is named, and our host's connection logs for it hold your IP address and connection times for 7 days. Claiming an OC Chat handle sends its fingerprint to three OpenTimestamps calendars and reads mempool.space, and each sees your IP address." },
689
+ { k: "8 and 9 October", v: "the email is stored, encrypted. Each session and the sign-in log keep the full user-agent. Our operators get an email when a new account first signs in." }
690
+ ]
691
+ },
692
+ {
693
+ kind: "callout",
694
+ text: "This policy covers the **non-custodial** OrangeCheck family \u2014 [ochk.io](https://ochk.io), including its documentation at [ochk.io/docs](https://ochk.io/docs), the six verb sites, and [chat.ochk.io](https://chat.ochk.io), [cosign.ochk.io](https://cosign.ochk.io), [btc.ochk.io](https://btc.ochk.io) and [globe.ochk.io](https://globe.ochk.io). The commercial products ochk.app and vault.ochk.io publish their own privacy policies covering the additional data their products handle."
670
695
  }
671
696
  ],
672
697
  sections: [
@@ -734,7 +759,7 @@ var privacy = {
734
759
  },
735
760
  {
736
761
  k: "how you sign in",
737
- v: "a Bitcoin address you prove with a signature (stored as is \u2014 it is public on-chain anyway); or, for an email code, Google or GitHub, the verified email address \u2014 encrypted at rest, plus a one-way hash of it so we can find your account"
762
+ v: "a Bitcoin address you prove with a signature (stored as is \u2014 it is public on-chain anyway); or, for an email code, Google or GitHub, the verified email address \u2014 encrypted at rest, plus a one-way hash of it so we can find your account. For Google or GitHub we also store that provider's id for your account, unencrypted, so a changed email still reaches the same account"
738
763
  },
739
764
  {
740
765
  k: "passkeys",
@@ -748,13 +773,34 @@ var privacy = {
748
773
  k: "sign-in log",
749
774
  v: "each sign-in and each identity you link or remove, with the IP address and user-agent at the time \u2014 kept for security; the IP address is cleared after 90 days"
750
775
  },
776
+ {
777
+ k: "accounts in one browser",
778
+ v: "sessions opened in the same browser share a roster id, so we can tell which of your accounts were signed in from it; and which of our sites you first signed up through"
779
+ },
780
+ {
781
+ k: "a coin backing your account",
782
+ v: "if you back your account with a coin: its address, outpoint and amount, the backing message you signed, and when we last found it unspent, or saw it released or spent. We read the coin from mempool.space. Earlier backings stay with your account. Sites you sign in to get only amount and age floors and a number that differs from site to site (all *.ochk.io sites share one), never the coin"
783
+ },
784
+ {
785
+ k: "OC Chat devices",
786
+ v: "for each chat.ochk.io device we vouch for: its device and Nostr public keys, when we vouched, and the sign-in that asked; for a device you revoke, the signed revocation, which we also publish to Nostr relays"
787
+ },
788
+ {
789
+ k: "btc.ochk.io alerts",
790
+ v: "the market thresholds you save on btc.ochk.io (up to 25), stored with your account"
791
+ },
751
792
  {
752
793
  k: "when you first sign in",
753
- v: "OrangeCheck\u2019s operators get an email, sent through our email provider (Resend), naming your `did:oc` and the identity you signed in with: your Bitcoin address or your email address"
794
+ v: "OrangeCheck\u2019s operators get an email, sent through our email provider (Resend), naming your `did:oc` and the kind of sign-in you used (a Bitcoin wallet, an email code, Google or GitHub). Notices sent up to and including 29 October 2026 (UTC) also named the identity itself: your Bitcoin address or your email address"
754
795
  },
755
796
  { k: "never", v: "a password, a private key, or a seed phrase" }
756
797
  ]
757
798
  },
799
+ { kind: "subhead", text: "who at OrangeCheck can see it" },
800
+ {
801
+ kind: "para",
802
+ text: "OrangeCheck's operators can see your account in owner-only consoles: analytics.ochk.io and, for a vault account, vault.ochk.io's. Their account lists show each email address masked: the first character of the part before the @ when that part has three or more characters, and none of it otherwise. Their account searches and actions refuse an email address: an account is found by email only through a lookup. Revealing one address, or looking up one account, asks for a written reason, which is recorded before your email address is shown. A lookup's record has its details about you cleared after 90 days; the reason stays."
803
+ },
758
804
  { kind: "subhead", text: "automatically collected" },
759
805
  {
760
806
  kind: "bullets",
@@ -774,7 +820,7 @@ var privacy = {
774
820
  },
775
821
  {
776
822
  k: "relay.ochk.io",
777
- v: "the Nostr relay we run (strfry on Fly.io, in Frankfurt). Your browser connects to it to read and publish signed records; our sites also publish the same records to public relays run by others (see the Terms). It keeps each record it accepts until the same key replaces it with a newer version or the record's own expiry passes: records are public, copied each day to a public archive on GitHub (where earlier versions stay), and otherwise deleted only after a lawful takedown request, which does not remove the copies elsewhere. Each record is stored with the address of the connection it arrived on, which is our host's proxy, not yours, and is never served or archived. Our hosting provider (Fly.io) carries each connection to it and handles your IP address to do so, for its own short retention window; we keep no separate copy. Our host's connection logs for the relay can hold your IP address and connection times; they are kept for 7 days."
823
+ v: "the Nostr relay we run (strfry on Fly.io, in Frankfurt). Your browser connects to it to read and publish signed records; our sites also publish the same records to public relays run by others (see the Terms). It keeps each record it accepts until the same key replaces it with a newer version or the record's own expiry passes: records are public, copied each day to a public archive on GitHub (where earlier versions stay), and otherwise deleted only after a lawful takedown request, which does not remove the copies elsewhere. Each record is stored with a pseudonym of the IP address it came from, made with a key that is kept only in memory and replaced each UTC day, so the relay can limit how much one source writes; your IP address itself is never stored, and the pseudonym is never served or archived. Our hosting provider (Fly.io) carries each connection to it and handles your IP address to do so, for its own short retention window; we keep no separate copy. Our host's connection logs for the relay can hold your IP address and connection times; they are kept for 7 days."
778
824
  }
779
825
  ]
780
826
  },
@@ -802,6 +848,95 @@ var privacy = {
802
848
  }
803
849
  ]
804
850
  },
851
+ {
852
+ id: "chat-cosign-btc-globe",
853
+ heading: "chat, cosign, btc and globe",
854
+ hint: "what each of these sites keeps",
855
+ blocks: [
856
+ { kind: "subhead", text: "chat.ochk.io" },
857
+ {
858
+ kind: "bullets",
859
+ items: [
860
+ {
861
+ k: "messages",
862
+ v: "end-to-end encrypted. Our server holds a message only as ciphertext, under a per-conversation id that names neither person, until the recipient picks it up: for up to 14 days, or 365 days on the Personal plan. A delivered message is deleted 24 hours after the recipient confirms it. We cannot read message content"
863
+ },
864
+ {
865
+ k: "on your device",
866
+ v: "your messages, contacts and settings are kept in your browser. Lock this device with a passphrase to encrypt your device key and messages there"
867
+ },
868
+ {
869
+ k: "sending limits",
870
+ v: "a count of messages sent per hour, under a keyed id made from your account, dropped after a day. chat.ochk.io stores no IP address"
871
+ },
872
+ {
873
+ k: "the Personal plan",
874
+ v: "if you buy it: your account id, the plan, when you paid and until when, the amount and the invoice id. The invoice our payment processor (BTCPay) holds says what was sold, not who bought it"
875
+ },
876
+ {
877
+ k: "published to Nostr",
878
+ v: "your device records, public channel posts (which are not encrypted), and a directory listing if you choose to be listed are public and stay on the relays. Direct messages travel encrypted"
879
+ },
880
+ {
881
+ k: "sent from your browser",
882
+ v: "chain data from mempool.space and blockstream.info, the drand network for messages that open at a future block, the OpenTimestamps calendars named above for a handle claim, and the Nostr relays you use; each sees your IP address"
883
+ },
884
+ {
885
+ k: "analytics",
886
+ v: "none"
887
+ },
888
+ {
889
+ k: "deletion",
890
+ v: "deleting your account deletes chat.ochk.io's other records of you; Personal plan payment records stay for accounting under a keyed id, not your account id. Messages waiting for pickup expire on their own, and what is on Nostr relays stays"
891
+ }
892
+ ]
893
+ },
894
+ { kind: "subhead", text: "cosign.ochk.io" },
895
+ {
896
+ kind: "bullets",
897
+ items: [
898
+ {
899
+ k: "what you post",
900
+ v: "your profile, projects, updates, cosigns and vouches are public on cosign.ochk.io"
901
+ },
902
+ {
903
+ k: "messages",
904
+ v: "**not end-to-end encrypted.** They are stored on our servers, and OrangeCheck's operators can read them"
905
+ },
906
+ {
907
+ k: "reports and notifications",
908
+ v: "a report you file keeps you as its reporter, the subject and your reason. Notifications are shown in the app only; a read one is deleted after 30 days and any after 90"
909
+ },
910
+ {
911
+ k: "payments between people",
912
+ v: "we record each Lightning payment for display (amount, time, status and the receiving Lightning address); the money goes directly between people and cosign never holds it"
913
+ },
914
+ {
915
+ k: "abuse limits",
916
+ v: "counts of writes per account, per IP address and per network, under keyed ids, dropped after 2 days; and your account's counts for the last ten minutes, kept with your account. No IP address is stored"
917
+ },
918
+ {
919
+ k: "deletion",
920
+ v: "deleting your account deletes your profile, projects and the rest, except that your messages in conversations with other people, the reports you filed, and payment records stay, with your account taken off them"
921
+ }
922
+ ]
923
+ },
924
+ { kind: "subhead", text: "btc.ochk.io" },
925
+ {
926
+ kind: "para",
927
+ text: "btc.ochk.io keeps only the alert thresholds you save, with your account, and deletes them when your account is deleted. Its planner and paper desk stay in your browser. Its market commentary is written each hour by an AI model provider (Anthropic) from market data and the web searches it runs; nothing about you is sent."
928
+ },
929
+ { kind: "subhead", text: "globe.ochk.io" },
930
+ {
931
+ kind: "para",
932
+ text: "globe.ochk.io stores nothing about you. Your browser fetches live network data directly from mempool.space, which sees your IP address."
933
+ },
934
+ {
935
+ kind: "para",
936
+ text: "cosign.ochk.io, btc.ochk.io and globe.ochk.io use the cookie-free analytics described below."
937
+ }
938
+ ]
939
+ },
805
940
  {
806
941
  id: "how-we-use",
807
942
  heading: "how we use information",
@@ -820,7 +955,7 @@ var privacy = {
820
955
  {
821
956
  id: "retention",
822
957
  heading: "data retention",
823
- hint: "no automatic deletion yet \xB7 permanent public artifacts",
958
+ hint: "scheduled and on-write deletion \xB7 permanent public artifacts",
824
959
  blocks: [
825
960
  {
826
961
  kind: "bullets",
@@ -839,15 +974,19 @@ var privacy = {
839
974
  },
840
975
  {
841
976
  k: "sessions",
842
- v: "deleted when you sign out. A session that simply expires after 30 days is not yet deleted automatically."
977
+ v: "deleted when you sign out; a session that expires after 30 days is deleted the next time anyone signs in"
843
978
  },
844
979
  {
845
980
  k: "IP addresses in the sign-in log",
846
981
  v: "cleared after 90 days; the entries themselves stay until your account is deleted"
847
982
  },
848
983
  {
849
- k: "account, sign-in identities, passkeys and sign-in log",
850
- v: "deleted when your account-deletion request completes; file one in your account settings, or ask at [[PRIVACY_CONTACT]]"
984
+ k: "email sign-in codes",
985
+ v: "the code itself is never stored and expires after 10 minutes; the record that lets it be used once is deleted when it is spent, or with the next code anyone asks for after it expires; per-address and per-network send counts, kept as keyed hashes, are dropped after a day"
986
+ },
987
+ {
988
+ k: "account, sign-in identities, passkeys, sign-in log, coin backings, OC Chat device records and btc.ochk.io alerts",
989
+ v: "deleted when your account-deletion request completes. File one in [your account on ochk.app](https://ochk.app/me/account), or ask at [[PRIVACY_CONTACT]]. A person completes the request, and we aim to do that within 48 hours. Nothing is erased while a blocker remains: sats you are owed or payouts still pending on ochk.app, live guardian-operator duties, developer projects or an OC Connect app you own, or a vault team you own that still has other members. What stays: the email our operators received when you first signed in, which names your `did:oc` and the kind of sign-in you used, and, if it was sent up to and including 29 October 2026 (UTC), the identity itself; a revocation already published to Nostr relays, and anything else you published there or anchored to Bitcoin; a marker under a hash of your account id that refuses your old sessions until they would have expired, about 30 days; and, if a site made an account for you, a hashed record of it, so that site is told the account was deleted instead of making a new one"
851
990
  },
852
991
  {
853
992
  k: "support emails",
@@ -896,7 +1035,7 @@ var terms2 = {
896
1035
  metaTitle: "Terms of Service \u2014 ochk.app",
897
1036
  metaDescription: "Terms of service for ochk.app: a Bitcoin-backed identity that pays users in sats. OrangeCheck custody during bring-up, federation custody and self-custody graduation as the destination, no KYC.",
898
1037
  effective: "2026-05-15",
899
- updated: "2026-10-27",
1038
+ updated: "2026-10-29",
900
1039
  preamble: [
901
1040
  {
902
1041
  kind: "callout",
@@ -970,6 +1109,11 @@ var terms2 = {
970
1109
  {
971
1110
  kind: "stub",
972
1111
  text: "Platform fees, payout mechanics and minimums, supported payout rails, currency-conversion handling, and the allocation of tax-reporting and tax-payment responsibility for sats you receive are being finalized for publication before general availability. You are advised that cashback received may be taxable income in your jurisdiction and that you are responsible for your own tax compliance. This section will be completed following review by counsel."
1112
+ },
1113
+ { kind: "subhead", text: "when a payout is held" },
1114
+ {
1115
+ kind: "para",
1116
+ text: "We hold a payout, and do not send it, when an earlier attempt to send it may already have gone through; while payouts are paused by a halt, a federation migration or a payout ceiling, or are not yet open to you; while the node that pays cannot cover everything owed, or its fee limit is unknown; for 24 hours after you change your payout destination; when your payout destination is no longer valid; or when our records disagree about what is owed. A paused or limited payout goes out on its own once the pause, ceiling, shortfall or 24 hours have passed; setting a new destination clears a destination hold; and a disagreement clears when we correct the record. A payout whose earlier attempt may have gone through is never retried on its own: we check the payment node, then either mark it paid with the payment's proof or release it to be sent again. A hold does not cancel what you are owed."
973
1117
  }
974
1118
  ]
975
1119
  },
@@ -1061,8 +1205,26 @@ var privacy2 = {
1061
1205
  metaTitle: "Privacy Policy \u2014 ochk.app",
1062
1206
  metaDescription: "ochk.app privacy policy. No KYC, no PII required, and a full account of what OrangeCheck stores.",
1063
1207
  effective: "2026-05-15",
1064
- updated: "2026-10-28",
1208
+ updated: "2026-10-31",
1065
1209
  preamble: [
1210
+ {
1211
+ kind: "callout",
1212
+ text: "**What changed, 8 to 31 October 2026.** We corrected this policy where it did not say what is kept or who sees it. Newest first; the [changelog](https://github.com/orangecheck/oc-packages/blob/main/legal/CHANGELOG.md) lists every change."
1213
+ },
1214
+ {
1215
+ kind: "bullets",
1216
+ items: [
1217
+ { k: "29 October", v: "the contact form sends your email address, an optional name, the topic and your message to our inbox through our email provider (Resend)." },
1218
+ { k: "27 and 28 October", v: "a guardian application holds the questionnaire's answers, and the charter publishes its handle, name, jurisdiction, contact channel and fingerprint. The policy says which records a deletion keeps, and that cached copies expire within a day." },
1219
+ { k: "26 October", v: "a session record keeps no IP address, and the sign-in log keeps it for 90 days." },
1220
+ { k: "25 October", v: "me.ochk.io records which sites you sign in to or share data with, and when. No site sees that record." },
1221
+ { k: "24 October", v: "signing in gives every site the same did:oc." },
1222
+ { k: "23 October", v: "an account a site makes for you through OrangeCheck Connect keeps a hash of the site's id for you, a keyed hash of your email if the site sent one, when it was made, whether you agreed to earn, and what it earned." },
1223
+ { k: "19 October", v: "ochk.app is the Service, and me.ochk.io is its API." },
1224
+ { k: "15 October", v: "ochk.app's own cookies are listed: __Host-oc_session, and __Host-oc_oauth for at most ten minutes during a Google or GitHub sign-in." },
1225
+ { k: "8 October", v: "a session record keeps your user-agent, and an email is personal data." }
1226
+ ]
1227
+ },
1066
1228
  {
1067
1229
  kind: "callout",
1068
1230
  text: "This policy covers the Service at both of its addresses, ochk.app and its API at me.ochk.io: one account, one store of records, one operator; \u201Cochk.app\u201D below means both. Its product is identity that pays you; its privacy posture is what makes it distinct from Sign in with Google. For a side-by-side comparison you can falsify, see [the privacy comparison](/privacy-compare)."
@@ -1141,6 +1303,10 @@ var privacy2 = {
1141
1303
  k: "guardian applications",
1142
1304
  v: "an application to run a guardian, made through ochk.app or by email to apply@ochk.io, holds your answers to the operator questionnaire, which asks, among other things, for a public handle, the name of the person or organisation that will run the guardian, its jurisdiction, a public contact channel, a key fingerprint and two references. Through ochk.app it can also hold an optional handle and email address that only the reviewer sees, for the decision. The questionnaire\u2019s handle, name, jurisdiction, contact channel and fingerprint are published in the federation charter, because guardians are named trust anchors. Nothing is checked against an ID, and nothing else is published."
1143
1305
  },
1306
+ {
1307
+ k: "messages you send us",
1308
+ v: "the contact form at ochk.app/contact sends your email address, an optional name, the topic you pick and your message to our inbox through our email provider (Resend). They are kept only as long as we need them to reply"
1309
+ },
1144
1310
  {
1145
1311
  k: "public anchors",
1146
1312
  v: "an OpenTimestamps proof over each envelope\u2019s hash, and a salted commitment to each envelope on Nostr. Public by design, and neither names you, the site or the amount. The envelope itself is served only to whoever holds its id. Drop manifests, which name no one, are published in full."
@@ -1469,7 +1635,21 @@ var privacy3 = {
1469
1635
  metaTitle: "Privacy Policy \u2014 OC Vault",
1470
1636
  metaDescription: "OC Vault privacy policy. End-to-end encrypted; OrangeCheck stores ciphertext only and cannot read your vault contents.",
1471
1637
  effective: "2026-05-15",
1472
- updated: "2026-10-08",
1638
+ updated: "2026-10-31",
1639
+ preamble: [
1640
+ {
1641
+ kind: "callout",
1642
+ text: "**What changed, 8 to 31 October 2026.** We corrected this policy where it did not say what is kept or who sees it. Newest first; the [changelog](https://github.com/orangecheck/oc-packages/blob/main/legal/CHANGELOG.md) lists every change."
1643
+ },
1644
+ {
1645
+ kind: "bullets",
1646
+ items: [
1647
+ { k: "31 October", v: "an emailed team invite keeps the invitee's address on the invite and shows it to the team's managers, the email goes through our email provider (Resend), and its link carries the team key only sealed under a one-time code." },
1648
+ { k: "29 October", v: "the browser extension is described. Deleting your account removes the sealed vault key and the rest of your vault data, keeps payment records under a keyed id, and is refused while you own a team that still has other members." },
1649
+ { k: "8 October", v: "your vault is filed under your did:oc, and the vault key is stored on our server, sealed under your passphrase and your recovery code." }
1650
+ ]
1651
+ }
1652
+ ],
1473
1653
  sections: [
1474
1654
  {
1475
1655
  id: "principles",
@@ -1501,6 +1681,10 @@ var privacy3 = {
1501
1681
  k: "team email (optional)",
1502
1682
  v: "if you choose to show teammates an email address in a team vault, that address"
1503
1683
  },
1684
+ {
1685
+ k: "emailed team invite",
1686
+ v: "if a team manager emails you an invite: your email address, which is kept on the invite and shown to the team's managers, and sent with the invite link through our email provider (Resend). The link carries the team key only sealed under a one-time code the manager gives you themselves; OrangeCheck never sees the code or the key. The invite is deleted when a manager revokes it, with the team, or when the account that sent or claimed it is deleted"
1687
+ },
1504
1688
  {
1505
1689
  k: "payment records",
1506
1690
  v: "for paid tiers: the BTCPay invoice id, sats paid, tier, and entitlement expiry. No card number, no billing address"
@@ -1547,12 +1731,12 @@ var privacy3 = {
1547
1731
  blocks: [
1548
1732
  {
1549
1733
  kind: "para",
1550
- text: "The same encrypted vault is reachable from the web app and from the CLI and SDK; a browser extension is planned. The zero-knowledge guarantee \u2014 that OrangeCheck only ever holds ciphertext \u2014 applies to all of them."
1734
+ text: "The same encrypted vault is reachable from the web app, the browser extension, and the CLI and SDK. The zero-knowledge guarantee \u2014 that OrangeCheck only ever holds ciphertext \u2014 applies to all of them."
1551
1735
  },
1552
- { kind: "subhead", text: "browser extension (not released yet)" },
1736
+ { kind: "subhead", text: "browser extension (not in a store yet)" },
1553
1737
  {
1554
1738
  kind: "para",
1555
- text: "There is no OC Vault browser extension yet. When one ships, it is designed to work this way: the extension fetches the same encrypted blobs the web app does, caches them **as ciphertext** in browser-extension storage, and decrypts in the service worker only after you enter your passphrase. The vault key lives in memory and a RAM-only `storage.session` slot \u2014 it is never written to disk. The content script that offers autofill receives **one entry's field values at fill time** and nothing else; it never receives the vault key or the entry index. The extension talks only to your own `vault.ochk.io` account: no analytics, no telemetry, no remote code."
1739
+ text: "The OC Vault browser extension is built for Chrome and Firefox but is not yet in either browser's store; its source is public at [github.com/orangecheck/oc-vault-extension](https://github.com/orangecheck/oc-vault-extension), and you can build and load it yourself. It fetches the same encrypted blobs the web app does, may cache them **as ciphertext** in extension storage, and decrypts in its service worker only after you unlock it. The vault key lives in memory and a RAM-only `storage.session` slot and is never written to disk in the clear; if you turn on passkey unlock, it is also stored sealed to your passkey. The content script that offers autofill receives only **one entry's username and password at fill time**; it never receives the vault key or the entry index. The extension talks only to vault.ochk.io, and to ochk.io for sign-in: no analytics, no telemetry, no remote code."
1556
1740
  },
1557
1741
  { kind: "subhead", text: "developer platform \u2014 access tokens, CLI, SDK, GitHub Action" },
1558
1742
  {
@@ -1584,11 +1768,15 @@ var privacy3 = {
1584
1768
  },
1585
1769
  {
1586
1770
  k: "sealed vault key",
1587
- v: "kept so a new device can unlock; deleting the cloud copy does not remove it \u2014 ask us at [[PRIVACY_CONTACT]] and we will"
1771
+ v: "kept so a new device can unlock; deleting the cloud copy does not remove it, and deleting your account does"
1588
1772
  },
1589
1773
  {
1590
1774
  k: "payment records",
1591
- v: "retained as required for accounting and entitlement verification"
1775
+ v: "retained as required for accounting and entitlement verification; when your account is deleted they stay under a keyed id, not your account id"
1776
+ },
1777
+ {
1778
+ k: "deleting your account",
1779
+ v: "removes your encrypted blobs, devices and grants, sealed vault key, access tokens, one-time shares, the teams you own alone, and your seats and invites in other teams. It is refused while you own a team that still has other members"
1592
1780
  },
1593
1781
  {
1594
1782
  k: "request logs",