Skip to content

Decision records

Each record explains one decision about Sluiceway and why it was made. A later record can amend or supersede an earlier one, and the last column says which.

Record Decision Amended or superseded
0001 Drive Pulumi through the CLI, not the Automation API Amended by 0055
0002 Sluiceway renders the diff itself from the normalized diff
0003 Deploy facts live in GitHub’s Deployments API Amended by 0051; Amended by 0056; Amended by 0054
0004 The issue body is a cache of row blocks, written without a lock Amended by 0011; Amended by 0035
0005 Every tick keeps its own event, and nothing deploys without a named ticker Superseded by 0025
0006 “Stack” is Sluiceway’s own word, and a stack’s id is derived, never chosen Amended by 0053
0007 A change says what happens to the real object and, separately, what happens to the tool’s record of it Amended by 0046; Amended by 0052; Amended by 0053; Amended by 0055
0008 The diff hash covers exactly what the row shows, no more and no less Amended by 0055; Amended by 0023; Amended by 0052; Amended by 0046
0009 Three marker kinds, a trailing row marker, and a body that is regenerated around its row blocks Amended by 0054; Amended by 0055; Amended by 0027; Amended by 0028; Amended by 0035; Amended by 0056
0010 Push scans are narrowed by a claim rule that fails open Amended by 0051
0011 A narrowed scan swaps its own rows, and every scan ends with one row per discovered stack
0012 A scan is one job that previews through a bounded pool, not a matrix of jobs
0013 The workflow prepares the environment, and Sluiceway never wraps or hooks the tool
0014 “Never hold credentials” is five promises that can be checked
0015 No generic tool arguments, only named adapter options Amended by 0055
0016 Deploys outside Sluiceway are legal and not detected
0017 The bot is always the workflow’s own token Amended by 0025; Amended by 0050; Amended by 0054
0018 A tick is authorized by one live rule that only narrows, and only a person can tick Amended by 0025; Amended by 0051; Amended by 0054
0019 Apply runs only on an open deployment record, so a fresh tick is the only retry Amended by 0025
0020 The tick is always a gate, and GitHub Environments make it a stronger one
0021 No property value ever leaves the adapter Amended by 0037; Amended by 0046; Amended by 0048; Amended by 0050; Amended by 0052
0022 The tool’s own words stay in the job log, and nothing is masked by guessing Amended by 0048; Amended by 0051; Amended by 0056
0023 Redact strips the issue, not the summary, and the hash still covers the whole diff Amended by 0052
0024 A replace or delete gets a guaranteed place on the row, not more data
0025 The edit history names the ticker, and the event is only a wake-up Amended by 0054
0026 Attribution names the pull requests a stack claims and only counts the rest Amended by 0037; Amended by 0054
0027 Deletes and replaces sit open under the row, everything else is folded Amended by 0044
0028 The size budget shortens the biggest rows first, gives back what fits, and never lists half the destroys
0029 The body puts pending first and folds away only what is calm Amended by 0040; Amended by 0051; Amended by 0055
0030 The mascot is the gate itself, and its name is Penny Amended by 0038
0031 The header has six states, bad news wins, and any delete or replace turns it plain Amended by 0038, 0039; Amended by 0055
0032 The voice lives in two lines and stops at the first sign of trouble Amended by 0043
0033 The state images are twelve small files named by role, served from the exact release tag Amended by 0039, 0040; Amended by 0055
0034 dashboard.personality: false removes the image and the voice Amended by 0043
0035 resolve hands apply a deployment record, and settle finds its own Amended by 0056; Amended by 0054
0036 A change that touches only a stack’s outputs is not shown in v1
0037 The summary has a budget too, and the job log holds what does not fit Amended by 0044
0038 Penny stands mid-channel on a wide quay, and failing is a jam Amended by 0047; Amended by 0043
0039 Pending has three pictures, picked from the pending count, which makes sixteen files of 880 by 160 Superseded in part by 0047; Amended by 0043
0040 The header and the two lines under it are centered, and every count has a dot Amended by 0043
0041 Observability is outputs and a result file, and Sluiceway sends nothing Amended by 0051; Amended by 0055
0042 A check mode validates a setup with no credentials and no tool
0043 The header always shows the real state, and a destroy adds a sign to the same picture Amended by 0047; Amended by 0055
0044 A row’s link lands on the page that holds the stack, and the summary has an index Amended by 0048; Amended by 0050
0045 A read-only dashboard draws no boxes
0046 A key is a property path, and a row shortens it without ever showing a value
0047 Pending shows one crate per pending stack up to twelve, and the destroy sign stands on a pole Amended 2026
0048 The tool’s own diff may reach the job log, when a repo asks for it Amended by 0050
0050 A pending row links to a preview page: a check run with the stack’s diff Amended by 0052
0051 A team can stop, rehearse and explain, and an empty fresh preview is not a failure
0052 A repo may list the property paths whose values appear, and nothing is guessed
0053 OpenTofu stacks are declared in sluiceway.yaml, initialised one directory at a time, and deployed from the plan that was hashed
0054 One tick merges a listed update, and the scan after the merge hands its diff to apply
0055 Drift is checked by a scheduled scan, shown on the stack’s own row, and repaired by a tick
0056 A stack waits only on the stacks it names, and a chain deploys one layer per run