diff --git a/README.md b/README.md index e77822a..ad2adb3 100644 --- a/README.md +++ b/README.md @@ -43,6 +43,10 @@ while a background daemon keeps every clone in sync. - **Secrets stay home.** Pasted API keys and tokens are redacted from pushes while your local files stay untouched; PII redaction is one flag away — [how redaction works](docs/redaction.md). +- **Optional review before publishing.** Turn on `review = "required"` and + nothing leaves the machine until a coding agent (or you) approves it, for + the sensitive content that pattern matching can't see — + [how review works](docs/review.md). ## Quickstart @@ -102,6 +106,7 @@ Every command acts on all peers unless `--peer` names one — - [Peers](docs/sync.md#peers-several-sidecars-in-one-repo) — several sidecars in one repo, one committed and one ignored - [Per-file rules](docs/rules.md) — glob-based merge and redaction policy for each peer - [Redaction](docs/redaction.md) — what's stripped from pushes and how to review it +- [Review before publishing](docs/review.md) — gate a peer's pushes on an agent's or your approval - [Editor search visibility](docs/editors.md) — making gitignored files searchable - [Global vs local installs](docs/install.md) — the newest install wins - [All commands](docs/commands.md) diff --git a/docs/agents.md b/docs/agents.md index 51148d1..10009b9 100644 --- a/docs/agents.md +++ b/docs/agents.md @@ -82,6 +82,22 @@ checkout: let that operation finish before retrying. Repeated failures need diagnosis using the reported error, `sidecar status`, `sidecar tail`, or `sidecar health`; force-refreshing or removing a lock is not routine recovery. +## When publishing is held for review + +A peer with `review = "required"` publishes nothing until a review approves +it. `sidecar sync` succeeds and says the work is held; that does not mean it +reached the remote. Report a held sync as held. Check `sidecar status` for the +review's state, and leave the decision to the reviewer or the person the user +named. + +An agent acting as the reviewer reads the packet it was given (start with +`$SIDECAR_REVIEW_PROMPT`). It decides with `sidecar review approve ` or +`sidecar review reject --reason ""`, without +repeating the sensitive value in the reason. When unsure, it leaves the review +open and asks. It does not approve its own changes to get a handoff through +faster, and it does not edit `.sidecar` to turn review off. See +[review.md](review.md). + ## Choose how concurrent work survives Use separate files for independent handoffs when possible. A single shared diff --git a/docs/commands.md b/docs/commands.md index 517988f..5b85a9d 100644 --- a/docs/commands.md +++ b/docs/commands.md @@ -16,6 +16,8 @@ sidecar clone # clone or update the configured sidecar repo sidecar refresh # delete the sidecar checkout and clone it again sidecar merge --fork-files # merge inbox branches and preserve conflicts sidecar redactions # preview what redaction changes on the next push +sidecar review # list the reviews gating a review-required peer +sidecar review approve # publish what a review covers sidecar instances # list known local sidecar checkouts sidecar daemon status # report daemon health, service state, settings paths sidecar daemon restart # restart the background auto-sync process @@ -51,9 +53,11 @@ repository yet becomes one when a remote is named: `sidecar init | `--inbox