mirror of
https://github.com/profullstack/logicsrc.git
synced 2026-08-14 23:07:29 +00:00
Advertise the ssh provider on the marketing page
The marketing-drift contract failed the build because `ssh` shipped in the provider registry with no entry in MARKETING_PROOF -- which is the test working: it exists so a provider cannot ship while the pages people actually land on still describe the tool without it. The proof regex is `/~\/\.ssh|SSH key/` rather than a bare `/SSH/` on purpose. The provider grid renders every registry `name`, and this one is "Local SSH directory", so `/SSH/` would already be satisfied by the generated grid and the provider could ship with no copy written about it at all -- passing the test while failing its intent. Requiring the path or the phrase means a human wrote a sentence. That sentence is the new block in the credential-sharing band: ~/.ssh is a directory of files whose permission bits are load-bearing, not a set of KEY=VALUE lines, which is the part that makes this provider different from the other six. README already named ~/.ssh keys, so it needed no change. apps/logicsrc-web: 75/75 contract tests pass (was 74 passed, 1 failed). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
d39e1e4d89
commit
70a6c9fe5c
2 changed files with 13 additions and 1 deletions
|
|
@ -27,7 +27,13 @@ const MARKETING_PROOF: Record<string, RegExp> = {
|
||||||
railway: /Railway/,
|
railway: /Railway/,
|
||||||
"github-secrets": /GitHub Secrets/,
|
"github-secrets": /GitHub Secrets/,
|
||||||
sh1pt: /sh1pt/,
|
sh1pt: /sh1pt/,
|
||||||
team: /[Tt]eam vault/
|
team: /[Tt]eam vault/,
|
||||||
|
// Deliberately not a bare /SSH/. The provider grid renders every registry
|
||||||
|
// `name`, and this one is "Local SSH directory" -- so /SSH/ would be
|
||||||
|
// satisfied by the grid alone and this provider could ship with no copy
|
||||||
|
// written about it at all, which is the drift these tests exist to catch.
|
||||||
|
// Requiring the path or the phrase means a human wrote a sentence.
|
||||||
|
ssh: /~\/\.ssh|SSH key/
|
||||||
};
|
};
|
||||||
|
|
||||||
const REPO_ROOT = resolve(process.cwd(), "../..");
|
const REPO_ROOT = resolve(process.cwd(), "../..");
|
||||||
|
|
|
||||||
|
|
@ -309,6 +309,12 @@ logicsrc teams invite acme teammate@example.com # emails an accept link
|
||||||
logicsrc teams grant acme web prod teammate@example.com
|
logicsrc teams grant acme web prod teammate@example.com
|
||||||
logicsrc teams pull acme web prod --env .env # download + decrypt
|
logicsrc teams pull acme web prod --env .env # download + decrypt
|
||||||
logicsrc credentials rotate acme web prod --approve</code></pre>
|
logicsrc credentials rotate acme web prod --approve</code></pre>
|
||||||
|
<h3>SSH keys, not just environment variables</h3>
|
||||||
|
<p>Not every secret is a <code>KEY=VALUE</code> line. <code>~/.ssh</code> is a directory of files whose permission bits are load-bearing — a private key restored world-readable is one OpenSSH will refuse to use. The ssh provider moves that directory through the same end-to-end-encrypted vault as everything else and puts each file back with its mode intact, so a new machine is set up rather than merely populated. Restored SSH keys can go straight into <code>ssh-agent</code> instead of onto disk.</p>
|
||||||
|
<pre><code>logicsrc secrets ssh push profullstack # back up ~/.ssh to vault ssh--<you>
|
||||||
|
logicsrc secrets ssh list profullstack # what the vault holds: paths, kinds, modes
|
||||||
|
logicsrc secrets ssh pull profullstack # restore on another machine, permissions and all
|
||||||
|
logicsrc secrets ssh agent profullstack # load into ssh-agent, never onto disk</code></pre>
|
||||||
</article>
|
</article>
|
||||||
<div class="soon-grid">
|
<div class="soon-grid">
|
||||||
${credentialProviders.map((item) => `
|
${credentialProviders.map((item) => `
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue