feat(credential-sharing): implement the Credential Sharing OpenSpec (M1-M3)

New @logicsrc/plugin-credential-sharing: a provider-neutral secret-sync engine
with env/.env, Doppler, Railway, and GitHub Secrets adapters behind one
CredentialProvider contract.

- engine: inspect -> diff -> plan -> approve -> sync -> rollback -> audit/export
- dry-run is the default for sync; --approve writes; destructive changes gated
- fingerprint-based diffs (salted SHA-256); raw values never printed or stored in
  plans/runs/audit; rollback pre-image kept in a 0600 .logicsrc vault (gitignored)
- github-secrets is write-only for values (sealed-box via libsodium), so it cannot
  be a sync source or value-restoring rollback target
- CLI: real `logicsrc credentials <providers|inspect|diff|plan|approve|sync|
  rollback|audit|export>` (replaces the prior stub)
- 4 JSON schemas registered in @logicsrc/validators
- flip logicsrc.com/credential-sharing band from coming-soon to available
- 37 tests pass; full env->env lifecycle verified; artifacts schema-validate

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Anthony Ettinger 2026-06-27 15:24:30 +00:00
parent 6e7f44612a
commit cf73fe5af2
30 changed files with 1849 additions and 38 deletions

40
package-lock.json generated
View file

@ -1428,6 +1428,10 @@
"resolved": "packages/plugin-core",
"link": true
},
"node_modules/@logicsrc/plugin-credential-sharing": {
"resolved": "plugins/credential-sharing",
"link": true
},
"node_modules/@logicsrc/plugin-email-accounts": {
"resolved": "plugins/email-accounts",
"link": true
@ -2457,6 +2461,13 @@
"integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==",
"license": "MIT"
},
"node_modules/@types/libsodium-wrappers": {
"version": "0.7.14",
"resolved": "https://registry.npmjs.org/@types/libsodium-wrappers/-/libsodium-wrappers-0.7.14.tgz",
"integrity": "sha512-5Kv68fXuXK0iDuUir1WPGw2R9fOZUlYlSAa0ztMcL0s0BfIDTqg9GXz8K30VJpPP3sxWhbolnQma2x+/TfkzDQ==",
"dev": true,
"license": "MIT"
},
"node_modules/@types/node": {
"version": "24.13.1",
"resolved": "https://registry.npmjs.org/@types/node/-/node-24.13.1.tgz",
@ -3809,6 +3820,21 @@
"dayjs": "^1.11.7"
}
},
"node_modules/libsodium": {
"version": "0.7.16",
"resolved": "https://registry.npmjs.org/libsodium/-/libsodium-0.7.16.tgz",
"integrity": "sha512-3HrzSPuzm6Yt9aTYCDxYEG8x8/6C0+ag655Y7rhhWZM9PT4NpdnbqlzXhGZlDnkgR6MeSTnOt/VIyHLs9aSf+Q==",
"license": "ISC"
},
"node_modules/libsodium-wrappers": {
"version": "0.7.16",
"resolved": "https://registry.npmjs.org/libsodium-wrappers/-/libsodium-wrappers-0.7.16.tgz",
"integrity": "sha512-Gtr/WBx4dKjvRL1pvfwZqu7gO6AfrQ0u9vFL+kXihtHf6NfkROR8pjYWn98MFDI3jN19Ii1ZUfPR9afGiPyfHg==",
"license": "ISC",
"dependencies": {
"libsodium": "^0.7.16"
}
},
"node_modules/lightningcss": {
"version": "1.32.0",
"resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz",
@ -6076,6 +6102,7 @@
"@logicsrc/account-core": "file:../account-core",
"@logicsrc/plugin-coinpay": "file:../../plugins/coinpay",
"@logicsrc/plugin-core": "file:../plugin-core",
"@logicsrc/plugin-credential-sharing": "file:../../plugins/credential-sharing",
"@logicsrc/plugin-email-accounts": "file:../../plugins/email-accounts",
"@logicsrc/plugin-feed-discovery": "file:../../plugins/feed-discovery",
"@logicsrc/plugin-social-accounts": "file:../../plugins/social-accounts",
@ -6195,6 +6222,19 @@
"vitest": "^4.0.8"
}
},
"plugins/credential-sharing": {
"name": "@logicsrc/plugin-credential-sharing",
"version": "0.1.0",
"dependencies": {
"@logicsrc/account-core": "file:../../packages/account-core",
"@logicsrc/plugin-core": "file:../../packages/plugin-core",
"libsodium-wrappers": "^0.7.15"
},
"devDependencies": {
"@types/libsodium-wrappers": "^0.7.14",
"vitest": "^4.0.8"
}
},
"plugins/email-accounts": {
"name": "@logicsrc/plugin-email-accounts",
"version": "0.1.0",