@rightkit/release 0.2.164 → 0.2.172

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.
Files changed (77) hide show
  1. package/README.md +121 -4
  2. package/addon-command.mjs +6 -13
  3. package/android-aab-scan.mjs +265 -0
  4. package/android-dev.mjs +111 -0
  5. package/android-ndk.mjs +77 -0
  6. package/android-play-upload.mjs +262 -0
  7. package/android-release.mjs +344 -0
  8. package/android-test-fixtures.mjs +79 -0
  9. package/apple-profile-create.mjs +363 -0
  10. package/bin/darwin/rightkit-swap +0 -0
  11. package/bin/darwin/rightkit-swap.sign.json +6 -0
  12. package/build-release.mjs +73 -13
  13. package/cargo-guard.mjs +2 -0
  14. package/cargo-profile-contract.mjs +183 -0
  15. package/cargo-target.mjs +8 -0
  16. package/cli/right-release.mjs +14 -4
  17. package/committed-source.mjs +1 -1
  18. package/dev-artifact-refresh.mjs +176 -0
  19. package/dev-artifact-support.mjs +61 -0
  20. package/development-signing.mjs +71 -4
  21. package/development.mjs +78 -46
  22. package/direct-bootstrap.mjs +26 -41
  23. package/disk-command.mjs +315 -13
  24. package/disk-policy.json +7 -5
  25. package/disk-policy.mjs +141 -22
  26. package/disk-stable-root.mjs +19 -16
  27. package/engine-locator.mjs +116 -0
  28. package/external-bin.mjs +133 -0
  29. package/github-release.mjs +2 -2
  30. package/github-updater-release.mjs +154 -0
  31. package/hardeningscan.mjs +1 -1
  32. package/in-place-install.mjs +56 -0
  33. package/install-app-windows.mjs +63 -0
  34. package/install-app.mjs +53 -23
  35. package/local-publish.mjs +11 -1
  36. package/mac-signing-matrix.mjs +23 -11
  37. package/managed-cargo.mjs +6 -0
  38. package/media-sidecar-catalog.mjs +45 -0
  39. package/media-sidecar.mjs +306 -0
  40. package/ownership-approval-command.mjs +10 -44
  41. package/ownership-approval.mjs +3 -42
  42. package/ownership-catalog-config.json +2 -1
  43. package/ownership-catalog.mjs +4 -2
  44. package/ownership-command.mjs +7 -9
  45. package/ownership-dependency-allowlist.json +25 -1
  46. package/ownership-evidence.mjs +8 -5
  47. package/ownership-git-inventory.mjs +41 -7
  48. package/ownership-lockfiles.mjs +91 -8
  49. package/ownership-mandatory-set.json +36 -16
  50. package/ownership-report.mjs +5 -6
  51. package/ownership-scan-worker.mjs +2 -2
  52. package/ownership-verdict.mjs +10 -7
  53. package/ownership.mjs +47 -29
  54. package/package.json +7 -4
  55. package/portable-development.mjs +32 -115
  56. package/preflight.mjs +4 -6
  57. package/publication-artifacts.mjs +34 -0
  58. package/publish-update.mjs +72 -11
  59. package/qa-adoption-exemptions.json +5 -0
  60. package/qa-build-features.mjs +7 -0
  61. package/qa-contract.mjs +182 -0
  62. package/qa-control-scan.mjs +3 -3
  63. package/release-qa-command.mjs +38 -12
  64. package/release-qa-installed.mjs +136 -0
  65. package/release-qa-receipt.mjs +23 -2
  66. package/release.mjs +283 -14
  67. package/rightkit-ownership.json +537 -5
  68. package/rightkit-sync.mjs +26 -0
  69. package/rightkit-versions.json +110 -62
  70. package/runtime-budget-classes.json +28 -0
  71. package/runtime-budgets.mjs +4 -1
  72. package/sign-candidate.mjs +161 -0
  73. package/sign-dev-artifact.mjs +198 -0
  74. package/stage-binary.mjs +60 -0
  75. package/swap-helper-bundle.mjs +105 -0
  76. package/templates/cargo-profiles.toml +28 -0
  77. package/upload-release.mjs +11 -1
@@ -16,12 +16,12 @@
16
16
  {
17
17
  "package": "rightkit-agents",
18
18
  "capability": "agent-sessions",
19
- "summary": "Supervised vendor agent sessions for Right Suite apps: shared agent event model, Claude Code stream-json and Codex app-server protocol clients, recorded fixtures. No SDK, no HTTP, no MCP.",
19
+ "summary": "Supervised vendor agent sessions for Right Suite apps: shared agent event model, Claude Code stream-json and Codex app-server protocol clients, session lifecycle with approvals and tree teardown, recorded fixtures. No SDK, no HTTP, no MCP.",
20
20
  "fingerprints": [],
21
21
  "detection": "declaration-only",
22
22
  "policyNotes": [
23
23
  "Declaration-only: vendor CLI protocol handling is not a dependency fingerprint.",
24
- "Lane 1 ships protocol clients and fixtures only; session lifecycle, approvals and the API backend land in later releases."
24
+ "0.2.0 adds the session lifecycle (feature session) over rightkit-child-process; the API backend lands in a later release."
25
25
  ]
26
26
  },
27
27
  {
@@ -35,6 +35,49 @@
35
35
  "Consumes rightkit-transcript words; holds no audio, models or I/O."
36
36
  ]
37
37
  },
38
+ {
39
+ "package": "rightkit-android",
40
+ "capability": "android-bridge",
41
+ "summary": "Android JNI context capture, UniFFI Kotlin bridge, Keystore credential bridge and Gradle library module for Right Suite apps",
42
+ "fingerprints": [
43
+ {
44
+ "id": "android.cargo.jni",
45
+ "type": "dependency",
46
+ "ecosystem": "cargo",
47
+ "name": "jni",
48
+ "tier": "advise",
49
+ "usageContext": {
50
+ "hosts": [
51
+ "macos",
52
+ "windows"
53
+ ],
54
+ "scope": "cargo direct competing dependency in an app crate; transitive findings require authenticated reachability"
55
+ },
56
+ "tierReason": "No recorded published-version qualification for this usage context on both macOS & Windows."
57
+ },
58
+ {
59
+ "id": "android.cargo.uniffi",
60
+ "type": "dependency",
61
+ "ecosystem": "cargo",
62
+ "name": "uniffi",
63
+ "tier": "advise",
64
+ "usageContext": {
65
+ "hosts": [
66
+ "macos",
67
+ "windows"
68
+ ],
69
+ "scope": "cargo direct competing dependency in an app crate; transitive findings require authenticated reachability"
70
+ },
71
+ "tierReason": "No recorded published-version qualification for this usage context on both macOS & Windows."
72
+ }
73
+ ],
74
+ "detection": "fingerprinted",
75
+ "policyNotes": [
76
+ "Apps reach the JavaVM, the application Context and Keystore through rightkit-android; app crates do not depend on jni directly for context capture.",
77
+ "App-specific UniFFI exports (model load, PCM sessions) belong in the app's own cdylib; the dependency allowlist decision for uniffi in app crates is made outside this file.",
78
+ "Fingerprints identify review candidates; published two-host replacement qualification is not recorded."
79
+ ]
80
+ },
38
81
  {
39
82
  "package": "rightkit-app-settings",
40
83
  "capability": "settings-persistence",
@@ -762,7 +805,7 @@
762
805
  {
763
806
  "id": "tauri.rs.standard-command-fn",
764
807
  "type": "source",
765
- "pattern": "\\bfn\\s+(?:secure_update_license_(?:get|set|delete)|secure_device_id_get_or_create)\\s*\\((?![\\s\\S]{0,800}?\\b(?:rightkit_device|rightkit_tauri|SecureService|DeviceService|AuthorizationService)\\b)",
808
+ "pattern": "\\bfn\\s+(?:secure_update_license_(?:get|set|delete)|secure_device_id_get_or_create)\\s*\\((?![\\s\\S]{0,800}?\\b(?:rightkit_device|rightkit_tauri|SecureService|DeviceService|AuthorizationService)\\b|[\\s\\S]{0,800}?\\b[A-Z][A-Z0-9_]*SERVICE\\s*\\.\\s*(?:get_or_create|get|set|delete)\\s*\\()",
766
809
  "codeOnly": true,
767
810
  "extensions": [
768
811
  ".rs"
@@ -784,6 +827,224 @@
784
827
  "Fingerprints identify review candidates (competing dependencies and distinctive implementation code); published two-host replacement qualification is not recorded."
785
828
  ]
786
829
  },
830
+ {
831
+ "package": "rightkit-docs",
832
+ "capability": "document-io",
833
+ "summary": "Product-neutral DOCX, XLSX and PDF read and write: format detection from content, typed reads with caps, typed write ops through an atomic writer with a source-hash recheck, honest loss receipts, hardened against zip bombs, XML entities, macros, encryption and formula injection",
834
+ "fingerprints": [
835
+ {
836
+ "id": "docs.cargo.docx-rs",
837
+ "type": "dependency",
838
+ "ecosystem": "cargo",
839
+ "name": "docx-rs",
840
+ "tier": "advise",
841
+ "usageContext": {
842
+ "hosts": [
843
+ "macos",
844
+ "windows"
845
+ ],
846
+ "scope": "cargo direct competing dependency; transitive findings require authenticated reachability"
847
+ },
848
+ "tierReason": "No recorded published-version qualification for this usage context on both macOS & Windows."
849
+ },
850
+ {
851
+ "id": "docs.cargo.docx-rust",
852
+ "type": "dependency",
853
+ "ecosystem": "cargo",
854
+ "name": "docx-rust",
855
+ "tier": "advise",
856
+ "usageContext": {
857
+ "hosts": [
858
+ "macos",
859
+ "windows"
860
+ ],
861
+ "scope": "cargo direct competing dependency; transitive findings require authenticated reachability"
862
+ },
863
+ "tierReason": "No recorded published-version qualification for this usage context on both macOS & Windows."
864
+ },
865
+ {
866
+ "id": "docs.cargo.calamine",
867
+ "type": "dependency",
868
+ "ecosystem": "cargo",
869
+ "name": "calamine",
870
+ "tier": "advise",
871
+ "usageContext": {
872
+ "hosts": [
873
+ "macos",
874
+ "windows"
875
+ ],
876
+ "scope": "cargo direct competing dependency; transitive findings require authenticated reachability"
877
+ },
878
+ "tierReason": "No recorded published-version qualification for this usage context on both macOS & Windows."
879
+ },
880
+ {
881
+ "id": "docs.cargo.rust-xlsxwriter",
882
+ "type": "dependency",
883
+ "ecosystem": "cargo",
884
+ "name": "rust_xlsxwriter",
885
+ "tier": "advise",
886
+ "usageContext": {
887
+ "hosts": [
888
+ "macos",
889
+ "windows"
890
+ ],
891
+ "scope": "cargo direct competing dependency; transitive findings require authenticated reachability"
892
+ },
893
+ "tierReason": "No recorded published-version qualification for this usage context on both macOS & Windows."
894
+ },
895
+ {
896
+ "id": "docs.cargo.umya-spreadsheet",
897
+ "type": "dependency",
898
+ "ecosystem": "cargo",
899
+ "name": "umya-spreadsheet",
900
+ "tier": "advise",
901
+ "usageContext": {
902
+ "hosts": [
903
+ "macos",
904
+ "windows"
905
+ ],
906
+ "scope": "cargo direct competing dependency; transitive findings require authenticated reachability"
907
+ },
908
+ "tierReason": "No recorded published-version qualification for this usage context on both macOS & Windows."
909
+ },
910
+ {
911
+ "id": "docs.cargo.office-oxide",
912
+ "type": "dependency",
913
+ "ecosystem": "cargo",
914
+ "name": "office_oxide",
915
+ "tier": "advise",
916
+ "usageContext": {
917
+ "hosts": [
918
+ "macos",
919
+ "windows"
920
+ ],
921
+ "scope": "cargo direct competing dependency; transitive findings require authenticated reachability"
922
+ },
923
+ "tierReason": "No recorded published-version qualification for this usage context on both macOS & Windows."
924
+ },
925
+ {
926
+ "id": "docs.cargo.edit-xlsx",
927
+ "type": "dependency",
928
+ "ecosystem": "cargo",
929
+ "name": "edit-xlsx",
930
+ "tier": "advise",
931
+ "usageContext": {
932
+ "hosts": [
933
+ "macos",
934
+ "windows"
935
+ ],
936
+ "scope": "cargo direct competing dependency; transitive findings require authenticated reachability"
937
+ },
938
+ "tierReason": "No recorded published-version qualification for this usage context on both macOS & Windows."
939
+ },
940
+ {
941
+ "id": "docs.npm.docx",
942
+ "type": "dependency",
943
+ "ecosystem": "npm",
944
+ "name": "docx",
945
+ "tier": "advise",
946
+ "usageContext": {
947
+ "hosts": [
948
+ "macos",
949
+ "windows"
950
+ ],
951
+ "scope": "npm direct competing dependency; transitive findings require authenticated reachability"
952
+ },
953
+ "tierReason": "No recorded published-version qualification for this usage context on both macOS & Windows."
954
+ },
955
+ {
956
+ "id": "docs.npm.exceljs",
957
+ "type": "dependency",
958
+ "ecosystem": "npm",
959
+ "name": "exceljs",
960
+ "tier": "advise",
961
+ "usageContext": {
962
+ "hosts": [
963
+ "macos",
964
+ "windows"
965
+ ],
966
+ "scope": "npm direct competing dependency; transitive findings require authenticated reachability"
967
+ },
968
+ "tierReason": "No recorded published-version qualification for this usage context on both macOS & Windows."
969
+ },
970
+ {
971
+ "id": "docs.npm.xlsx",
972
+ "type": "dependency",
973
+ "ecosystem": "npm",
974
+ "name": "xlsx",
975
+ "tier": "advise",
976
+ "usageContext": {
977
+ "hosts": [
978
+ "macos",
979
+ "windows"
980
+ ],
981
+ "scope": "npm direct competing dependency; transitive findings require authenticated reachability"
982
+ },
983
+ "tierReason": "No recorded published-version qualification for this usage context on both macOS & Windows."
984
+ },
985
+ {
986
+ "id": "docs.npm.mammoth",
987
+ "type": "dependency",
988
+ "ecosystem": "npm",
989
+ "name": "mammoth",
990
+ "tier": "advise",
991
+ "usageContext": {
992
+ "hosts": [
993
+ "macos",
994
+ "windows"
995
+ ],
996
+ "scope": "npm direct competing dependency; transitive findings require authenticated reachability"
997
+ },
998
+ "tierReason": "No recorded published-version qualification for this usage context on both macOS & Windows."
999
+ }
1000
+ ],
1001
+ "detection": "fingerprinted",
1002
+ "policyNotes": [
1003
+ "Package contract retained; dependency declarations do not verify integration.",
1004
+ "Fingerprints identify review candidates; published two-host replacement qualification is not recorded.",
1005
+ "Reads and edits PDF through rightkit-pdf (capability pdf-engine); use pdf-engine directly for page graphs, font work and the staged-save pipeline."
1006
+ ]
1007
+ },
1008
+ {
1009
+ "package": "rightkit-docs",
1010
+ "capability": "docx",
1011
+ "summary": "Alias of document-io: read, create and edit Word (.docx) documents; owner is rightkit-docs",
1012
+ "fingerprints": [],
1013
+ "detection": "declaration-only",
1014
+ "policyNotes": [
1015
+ "Discovery alias so `rightkit owns docx` resolves to the document-io owner; carries no fingerprints of its own."
1016
+ ]
1017
+ },
1018
+ {
1019
+ "package": "rightkit-docs",
1020
+ "capability": "xlsx",
1021
+ "summary": "Alias of document-io: read, create and edit Excel (.xlsx) workbooks; owner is rightkit-docs",
1022
+ "fingerprints": [],
1023
+ "detection": "declaration-only",
1024
+ "policyNotes": [
1025
+ "Discovery alias so `rightkit owns xlsx` resolves to the document-io owner; carries no fingerprints of its own."
1026
+ ]
1027
+ },
1028
+ {
1029
+ "package": "rightkit-docs",
1030
+ "capability": "document",
1031
+ "summary": "Alias of document-io: read and write DOCX, XLSX and PDF documents; owner is rightkit-docs",
1032
+ "fingerprints": [],
1033
+ "detection": "declaration-only",
1034
+ "policyNotes": [
1035
+ "Discovery alias so `rightkit owns document` resolves to the document-io owner; carries no fingerprints of its own."
1036
+ ]
1037
+ },
1038
+ {
1039
+ "package": "rightkit-docs",
1040
+ "capability": "spreadsheet",
1041
+ "summary": "Alias of document-io: read, create and edit spreadsheets (.xlsx); owner is rightkit-docs",
1042
+ "fingerprints": [],
1043
+ "detection": "declaration-only",
1044
+ "policyNotes": [
1045
+ "Discovery alias so `rightkit owns spreadsheet` resolves to the document-io owner; carries no fingerprints of its own."
1046
+ ]
1047
+ },
787
1048
  {
788
1049
  "package": "rightkit-embed",
789
1050
  "capability": "embeddings",
@@ -1059,6 +1320,18 @@
1059
1320
  "Fingerprints identify review candidates (competing dependencies and distinctive implementation code); published two-host replacement qualification is not recorded."
1060
1321
  ]
1061
1322
  },
1323
+ {
1324
+ "package": "rightkit-hooks",
1325
+ "capability": "lifecycle-hooks",
1326
+ "summary": "Native pair of @rightkit/hooks: typed Claude Code and Codex hook payloads, a deadline-bound dispatcher that always exits 0, exact per-event output builders, and emitted/observed delivery receipts.",
1327
+ "fingerprints": [],
1328
+ "detection": "declaration-only",
1329
+ "policyNotes": [
1330
+ "Declaration-only: no precise implementation fingerprint; never enforced ownership or verified integration.",
1331
+ "Shares the lifecycle-hooks capability with @rightkit/hooks (JS). Unlike the JS bin, the Rust dispatcher exits 0 on every internal failure.",
1332
+ "Codex PreToolUse denials exit 2 with the reason on stderr (the shipped Legion shape); every other failure prints nothing and exits 0."
1333
+ ]
1334
+ },
1062
1335
  {
1063
1336
  "package": "rightkit-hotkeys",
1064
1337
  "capability": "global-hotkeys",
@@ -1622,10 +1895,42 @@
1622
1895
  "Fingerprints identify review candidates; published two-host replacement qualification is not recorded."
1623
1896
  ]
1624
1897
  },
1898
+ {
1899
+ "package": "rightkit-motion",
1900
+ "capability": "motion-beat-sync",
1901
+ "summary": "Bracketed-script beat sync: parse a script with [spans] and snap animation cues to word timings from rightkit-transcript; typed errors on any mismatch, no fuzzy matching",
1902
+ "fingerprints": [],
1903
+ "detection": "declaration-only",
1904
+ "policyNotes": [
1905
+ "Declaration-only: script parsing and word snapping are not an ownership fingerprint.",
1906
+ "Consumes rightkit-transcript words; fuzzy ASR matching stays in rightkit-align."
1907
+ ]
1908
+ },
1909
+ {
1910
+ "package": "rightkit-motion",
1911
+ "capability": "motion-inspect-sheets",
1912
+ "summary": "Storyboard inspect sheets: plan and (feature assemble) compose rendered frames into sheets, six tiles per 2x3 sheet by default with a 480 px minimum tile width (defaults to confirm), with a rightkit.motion.sheets.v1 manifest",
1913
+ "fingerprints": [],
1914
+ "detection": "declaration-only",
1915
+ "policyNotes": [
1916
+ "Declaration-only: sheet layout is not an ownership fingerprint.",
1917
+ "No media decode or encode lives in this crate; callers decode frames through rightkit-ffmpeg."
1918
+ ]
1919
+ },
1920
+ {
1921
+ "package": "rightkit-motion",
1922
+ "capability": "motion-takes",
1923
+ "summary": "Append-only checksummed take container for rendered frames (gated: not built until a producer is named)",
1924
+ "fingerprints": [],
1925
+ "detection": "declaration-only",
1926
+ "policyNotes": [
1927
+ "Declaration-only and gated: the take module is not built; this capability reserves the name until a producer is named (decision record docs/design/motion-owner.md)."
1928
+ ]
1929
+ },
1625
1930
  {
1626
1931
  "package": "rightkit-oauth",
1627
1932
  "capability": "oauth-sign-in",
1628
- "summary": "OAuth sign-in: loopback PKCE, device flow, provider endpoints, refresh",
1933
+ "summary": "OAuth sign-in: loopback PKCE, device flow, provider endpoints, refresh; default-browser sign-in only",
1629
1934
  "fingerprints": [
1630
1935
  {
1631
1936
  "id": "oauth.cargo.oauth2",
@@ -1701,6 +2006,111 @@
1701
2006
  "scope": "npm direct competing dependency; transitive findings require authenticated reachability"
1702
2007
  },
1703
2008
  "tierReason": "No recorded published-version qualification for this usage context on both macOS & Windows."
2009
+ },
2010
+ {
2011
+ "id": "oauth.webview.auth-url-load",
2012
+ "excludePaths": [
2013
+ "crates/rightkit-ownership/tests/ownership_fixtures.rs",
2014
+ "packages/release/fixtures/ownership/source-fingerprint-samples.mjs"
2015
+ ],
2016
+ "type": "source",
2017
+ "pattern": "\\b(?:WebviewWindowBuilder|WebviewUrl::External|WebviewBuilder|WebView2|WKWebView|loadRequest|loadUrl|load_url|\\.navigate|\\.eval)\\b[^\\n]{0,300}(?:accounts\\.google\\.com|appleid\\.apple\\.com|/oauth2?/authorize|/o/oauth2/(?:v2/)?auth)",
2018
+ "codeOnly": false,
2019
+ "extensions": [
2020
+ ".rs",
2021
+ ".ts",
2022
+ ".tsx",
2023
+ ".js",
2024
+ ".jsx",
2025
+ ".mjs",
2026
+ ".swift",
2027
+ ".m",
2028
+ ".mm",
2029
+ ".kt",
2030
+ ".java",
2031
+ ".cs"
2032
+ ],
2033
+ "tier": "block",
2034
+ "usageContext": {
2035
+ "hosts": [
2036
+ "macos",
2037
+ "windows"
2038
+ ],
2039
+ "scope": "Source text (the auth URL sits in a string literal); an app loading an authorization URL in its own webview"
2040
+ },
2041
+ "tierReason": "Banned by owner policy; sign-in opens the user's default browser through rightkit-oauth (browser::SystemBrowser), never an in-app webview",
2042
+ "policy": "banned",
2043
+ "policyAuthority": "Adrian 2026-10-17: every Google, Apple or OAuth sign-in opens the default browser, never an in-app webview (Orthic-Labs/rightkit#279)"
2044
+ },
2045
+ {
2046
+ "id": "oauth.webview.on-navigation-intercept",
2047
+ "excludePaths": [
2048
+ "crates/rightkit-ownership/tests/ownership_fixtures.rs",
2049
+ "packages/release/fixtures/ownership/source-fingerprint-samples.mjs"
2050
+ ],
2051
+ "type": "source",
2052
+ "pattern": "\\bon_navigation\\b[^\\n]{0,400}(?:[?&]code=|redirect_uri|\\boauth|access_token|id_token)",
2053
+ "codeOnly": false,
2054
+ "extensions": [
2055
+ ".rs",
2056
+ ".ts",
2057
+ ".tsx",
2058
+ ".js",
2059
+ ".jsx",
2060
+ ".mjs",
2061
+ ".swift",
2062
+ ".m",
2063
+ ".mm",
2064
+ ".kt",
2065
+ ".java",
2066
+ ".cs"
2067
+ ],
2068
+ "tier": "block",
2069
+ "usageContext": {
2070
+ "hosts": [
2071
+ "macos",
2072
+ "windows"
2073
+ ],
2074
+ "scope": "Source text (the auth URL sits in a string literal); an on_navigation callback intercepting an OAuth redirect"
2075
+ },
2076
+ "tierReason": "Banned by owner policy; sign-in opens the user's default browser through rightkit-oauth (browser::SystemBrowser), never an in-app webview",
2077
+ "policy": "banned",
2078
+ "policyAuthority": "Adrian 2026-10-17: every Google, Apple or OAuth sign-in opens the default browser, never an in-app webview (Orthic-Labs/rightkit#279)"
2079
+ },
2080
+ {
2081
+ "id": "oauth.webview.bundled-chromium-login",
2082
+ "excludePaths": [
2083
+ "crates/rightkit-ownership/tests/ownership_fixtures.rs",
2084
+ "packages/release/fixtures/ownership/source-fingerprint-samples.mjs"
2085
+ ],
2086
+ "type": "source",
2087
+ "pattern": "\\b(?:chromiumoxide|headless_chrome|CefBrowser(?:Host)?|CefLifeSpanHandler)\\b[^\\n]{0,300}(?:accounts\\.google\\.com|appleid\\.apple\\.com|/oauth2?/authorize|/o/oauth2/(?:v2/)?auth)",
2088
+ "codeOnly": false,
2089
+ "extensions": [
2090
+ ".rs",
2091
+ ".ts",
2092
+ ".tsx",
2093
+ ".js",
2094
+ ".jsx",
2095
+ ".mjs",
2096
+ ".swift",
2097
+ ".m",
2098
+ ".mm",
2099
+ ".kt",
2100
+ ".java",
2101
+ ".cs"
2102
+ ],
2103
+ "tier": "block",
2104
+ "usageContext": {
2105
+ "hosts": [
2106
+ "macos",
2107
+ "windows"
2108
+ ],
2109
+ "scope": "Source text (the auth URL sits in a string literal); bundled Chromium used to run a sign-in"
2110
+ },
2111
+ "tierReason": "Banned by owner policy; sign-in opens the user's default browser through rightkit-oauth (browser::SystemBrowser), never an in-app webview",
2112
+ "policy": "banned",
2113
+ "policyAuthority": "Adrian 2026-10-17: every Google, Apple or OAuth sign-in opens the default browser, never an in-app webview (Orthic-Labs/rightkit#279)"
1704
2114
  }
1705
2115
  ],
1706
2116
  "detection": "fingerprinted",
@@ -1973,6 +2383,27 @@
1973
2383
  "Fingerprints identify review candidates; published two-host replacement qualification is not recorded."
1974
2384
  ]
1975
2385
  },
2386
+ {
2387
+ "package": "rightkit-pdf",
2388
+ "capability": "pdf",
2389
+ "summary": "Discovery alias of pdf-engine: PDF inspect, edit, merge and text extraction are rightkit-pdf; one-shot PDF text read and replace beside DOCX and XLSX is rightkit-docs (document-io)",
2390
+ "fingerprints": [],
2391
+ "detection": "declaration-only",
2392
+ "policyNotes": [
2393
+ "Discovery alias so `rightkit owns pdf` resolves to the PDF owner; carries no fingerprints of its own."
2394
+ ]
2395
+ },
2396
+ {
2397
+ "package": "rightkit-platform-rules",
2398
+ "capability": "platform-rules",
2399
+ "summary": "Versioned catalog of per-platform limits and rules with a stable rule-revision hash and a check of planned values against sourced rules",
2400
+ "fingerprints": [],
2401
+ "detection": "declaration-only",
2402
+ "policyNotes": [
2403
+ "Declaration-only: the bundled rules catalog and revision hash are not an ownership fingerprint.",
2404
+ "Unsourced, stale or missing rules block use; apps bind work to a rule revision instead of hard-coding platform limits."
2405
+ ]
2406
+ },
1976
2407
  {
1977
2408
  "package": "rightkit-playback",
1978
2409
  "capability": "media-playback",
@@ -2199,7 +2630,7 @@
2199
2630
  {
2200
2631
  "package": "rightkit-review",
2201
2632
  "capability": "content-review",
2202
- "summary": "Shared review capability: typed deterministic checks over a media or brief description, declared holds, a hard-capped repair loop, an advisory judge interface that cannot override deterministic failures, and versioned verdict records.",
2633
+ "summary": "Shared review capability: typed deterministic checks over a media or brief description, declared holds, a hard-capped repair loop, an advisory judge interface that cannot override deterministic failures, versioned verdict records, and the autonomy ladder (reviewed, review-light, autonomous per content type and platform, with overridable thresholds and a version-tagged state).",
2203
2634
  "fingerprints": [],
2204
2635
  "detection": "declaration-only",
2205
2636
  "policyNotes": [
@@ -2512,6 +2943,17 @@
2512
2943
  "Fingerprints identify review candidates (competing dependencies and distinctive implementation code); published two-host replacement qualification is not recorded."
2513
2944
  ]
2514
2945
  },
2946
+ {
2947
+ "package": "rightkit-spend",
2948
+ "capability": "spend-ledger",
2949
+ "summary": "Spend reservation, allowance and compare-and-swap ledger on SQLite: integer micro-units, idempotent reserve on request id, in-flight and overrun handling, opaque allowance periods",
2950
+ "fingerprints": [],
2951
+ "detection": "declaration-only",
2952
+ "policyNotes": [
2953
+ "Declaration-only: the ledger tables and reservation state machine are not an ownership fingerprint.",
2954
+ "Price rows live in rightkit-llm; the ledger stores opaque route and price-version text and no currency."
2955
+ ]
2956
+ },
2515
2957
  {
2516
2958
  "package": "rightkit-sync",
2517
2959
  "capability": "cloud-sync",
@@ -2523,6 +2965,17 @@
2523
2965
  "No precise implementation fingerprint; declaration-only inventory, never enforced ownership or verified integration."
2524
2966
  ]
2525
2967
  },
2968
+ {
2969
+ "package": "rightkit-sync-keys",
2970
+ "capability": "sync-key-management",
2971
+ "summary": "End-to-end sync key management: account data key, versioned rotation, per-zone key derivation, OS credential storage and device-approval key transfer (X25519, short code, AEAD); declaration-only detection (no precise implementation fingerprint)",
2972
+ "fingerprints": [],
2973
+ "detection": "declaration-only",
2974
+ "policyNotes": [
2975
+ "Package contract retained; dependency declarations do not verify integration.",
2976
+ "No precise implementation fingerprint; declaration-only inventory, never enforced ownership or verified integration."
2977
+ ]
2978
+ },
2526
2979
  {
2527
2980
  "package": "rightkit-tauri-shell",
2528
2981
  "capability": "desktop-shell",
@@ -2748,6 +3201,63 @@
2748
3201
  "Fingerprints identify review candidates; published two-host replacement qualification is not recorded."
2749
3202
  ]
2750
3203
  },
3204
+ {
3205
+ "package": "rightkit-typeset",
3206
+ "capability": "typeset",
3207
+ "summary": "Typst rendering for titles, captions and math, with mitex LaTeX input: SVG (and PNG with a feature), no file access, no package fetching, explicit fonts",
3208
+ "fingerprints": [
3209
+ {
3210
+ "id": "typeset.cargo.typst",
3211
+ "type": "dependency",
3212
+ "ecosystem": "cargo",
3213
+ "name": "typst",
3214
+ "tier": "advise",
3215
+ "usageContext": {
3216
+ "hosts": [
3217
+ "macos",
3218
+ "windows"
3219
+ ],
3220
+ "scope": "cargo direct competing dependency; transitive findings require authenticated reachability"
3221
+ },
3222
+ "tierReason": "No recorded published-version qualification for this usage context on both macOS & Windows."
3223
+ },
3224
+ {
3225
+ "id": "typeset.cargo.typst-render",
3226
+ "type": "dependency",
3227
+ "ecosystem": "cargo",
3228
+ "name": "typst-render",
3229
+ "tier": "advise",
3230
+ "usageContext": {
3231
+ "hosts": [
3232
+ "macos",
3233
+ "windows"
3234
+ ],
3235
+ "scope": "cargo direct competing dependency; transitive findings require authenticated reachability"
3236
+ },
3237
+ "tierReason": "No recorded published-version qualification for this usage context on both macOS & Windows."
3238
+ },
3239
+ {
3240
+ "id": "typeset.cargo.mitex",
3241
+ "type": "dependency",
3242
+ "ecosystem": "cargo",
3243
+ "name": "mitex",
3244
+ "tier": "advise",
3245
+ "usageContext": {
3246
+ "hosts": [
3247
+ "macos",
3248
+ "windows"
3249
+ ],
3250
+ "scope": "cargo direct competing dependency; transitive findings require authenticated reachability"
3251
+ },
3252
+ "tierReason": "No recorded published-version qualification for this usage context on both macOS & Windows."
3253
+ }
3254
+ ],
3255
+ "detection": "fingerprinted",
3256
+ "policyNotes": [
3257
+ "Package contract retained; dependency declarations do not verify integration.",
3258
+ "Fingerprints identify review candidates; apps use rightkit-typeset instead of taking typst, typst-render or mitex directly; published two-host replacement qualification is not recorded."
3259
+ ]
3260
+ },
2751
3261
  {
2752
3262
  "package": "rightkit-vad",
2753
3263
  "capability": "voice-activity-detection",
@@ -2790,6 +3300,17 @@
2790
3300
  "Fingerprints identify review candidates; published two-host replacement qualification is not recorded."
2791
3301
  ]
2792
3302
  },
3303
+ {
3304
+ "package": "rightkit-vault",
3305
+ "capability": "secret-vault",
3306
+ "summary": "Split-key secret vault: a small secret map sealed under a random data key, the key wrapped under a server-held wrapping key combined with a device-held client secret, blob kept in the user's own cloud app folder; declaration-only detection (no precise implementation fingerprint)",
3307
+ "fingerprints": [],
3308
+ "detection": "declaration-only",
3309
+ "policyNotes": [
3310
+ "Package contract retained; dependency declarations do not verify integration.",
3311
+ "No precise implementation fingerprint; declaration-only inventory, never enforced ownership or verified integration."
3312
+ ]
3313
+ },
2793
3314
  {
2794
3315
  "package": "rightkit-workflow",
2795
3316
  "capability": "scenario-runtime",
@@ -3892,6 +4413,17 @@
3892
4413
  "No precise implementation fingerprint; declaration-only inventory, never enforced ownership or verified integration."
3893
4414
  ]
3894
4415
  },
4416
+ {
4417
+ "package": "@rightkit/sync-worker",
4418
+ "capability": "sync-worker",
4419
+ "summary": "Cloudflare Worker implementing the server side of rightkit-sync-http/1 on D1 and R2; declaration-only detection (no precise implementation fingerprint)",
4420
+ "fingerprints": [],
4421
+ "detection": "declaration-only",
4422
+ "policyNotes": [
4423
+ "Package contract retained; dependency declarations do not verify integration.",
4424
+ "No precise implementation fingerprint; declaration-only inventory, never enforced ownership or verified integration."
4425
+ ]
4426
+ },
3895
4427
  {
3896
4428
  "package": "@rightkit/tauri",
3897
4429
  "capability": "tauri-host-adapters",
package/rightkit-sync.mjs CHANGED
@@ -166,6 +166,32 @@ export async function syncRightkitVersions({ check = false, fetchImpl = fetch, f
166
166
  return { changes, unpublished, copies, written };
167
167
  }
168
168
 
169
+ /** Stage source versions into the feed BEFORE packing, so the rightkit-versions.json a tarball ships lists
170
+ * the very version it ships with (the feed is otherwise written after publish and lags by one release).
171
+ * Synchronous and offline: a unit below its staged version is skipped (never lowered); published pins stay
172
+ * allowed through the same retainPublished rule as stageVersion. Refreshes the consumer copies. */
173
+ export function stageSourceVersions(entries, { file = VERSIONS_FILE, root = rightkitRoot, log = (line) => process.stdout.write(`${line}\n`) } = {}) {
174
+ const versions = JSON.parse(readFileSync(file, "utf8"));
175
+ const next = structuredClone(versions); const changes = [];
176
+ for (const { registry, name, version } of entries) {
177
+ const [stagedKey] = versionKeys(registry);
178
+ if (typeof name !== "string" || !name.trim()) throw new Error("stageSourceVersions requires a package or crate name");
179
+ if (typeof version !== "string" || !SEMVER.test(version)) throw new Error(`invalid semver: ${version}`);
180
+ const current = next[stagedKey]?.[name] ?? next[registry]?.[name] ?? null;
181
+ if (current && compareVersions(version, current) <= 0) continue;
182
+ retainPublished(next, { registry, name, version }, [current, next.registry?.[registry]?.[name]], undefined);
183
+ next[stagedKey] ??= {};
184
+ next[stagedKey][name] = version;
185
+ next[stagedKey] = Object.fromEntries(Object.entries(next[stagedKey]).sort(([a], [b]) => a.localeCompare(b)));
186
+ changes.push({ registry, name, from: current, to: version });
187
+ }
188
+ const written = JSON.stringify(next) !== JSON.stringify(versions);
189
+ if (written) writeFileSync(file, `${JSON.stringify(next, null, 2)}\n`);
190
+ const copies = syncConsumerCopies(root);
191
+ for (const change of changes) log(`${change.registry} ${change.name}: ${change.from ?? "unlisted"} -> ${change.to} (staged before pack)`);
192
+ return { changes, copies, written };
193
+ }
194
+
169
195
  /** Record one just-published version (the registry index can lag the upload) and refresh the copies.
170
196
  * Called by right-release after a verified cargo or npm publish; never fails the publish itself unless `strict` is set. */
171
197
  export function recordPublished({ registry, name, version }, { file = VERSIONS_FILE, root = rightkitRoot, log = (line) => process.stdout.write(`${line}\n`), strict = false } = {}) {