02 — Commands & UX
Summary
Every block is the intended user-facing output, to be matched word for word — several strings are load-bearing because they are the only place a user learns why an irreversible thing is irreversible. The publish baseline is private-and-ciphertext-only; publishing the read key requires --visibility public and a stated-consequence confirmation: anyone with the URL can read every file, now and in every future publish, and copies cannot be recalled. The 19 Aug revisions remove the target argument — publish always writes .sg_vault/publish/ and deployment is a separate act — add the API-docs flags with the CDN default, the sgit vault attach command surface (P9, future — its strings taken from the executed drill, including the wrong-key 'Nothing written' refusal), and the backup warning when a git work tree does not ignore backups/.
Key concepts
- Consequence stated, not implied — the --visibility public confirmation is the disclosure moment, designed as such
- The safe default — bare visibility: no key published, readers supply their own
Key ideas
- Load-bearing strings are part of the spec: change one, explain it in the PR.
- The next-steps block after publish teaches the two consumption paths (serve locally, clone from any GET host) at the moment they matter.