Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions RECONCILE.md
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,16 @@ repo is public, so both true secrets and sensitive-but-not-secret identifiers
empty value.
- **Never** print, echo, or log a resolved value — not in the plan, not in
apply output, not in the PR comment. Always refer to it as `env:VAR_NAME`.
- **Never emit a raw API response (or request) body for a component to stdout
or logs.** A `GET`/`POST`/`PATCH` on an input or output returns
`config.settings` — which may hold resolved sensitive values (e.g. a bucket or
role ARN). Redact **at the source**: pipe every such call through a filter that
strips those blocks before anything reaches the terminal, e.g.
`curl -s ... | jq 'del(.config.settings, .config.secrets)'`. Do not `curl` a
component endpoint without such a filter, do not `cat`/echo a saved response
body, and do not paste one into your reasoning output. This rule holds even
though CI secret-masking and the CLI tool sandbox usually contain such output
— do not rely on downstream masking.
- Secrets are **write-only** in Monad: GET returns them redacted (`{}`), so you
cannot diff them; they do **not** participate in hash/drift detection (§7) and
you **always** re-send resolved secrets on any create/update. Env-sourced
Expand Down
Loading