The row marker carries its counts and what a queued row waits behind, and the example dashboard is data
Decision record 0110
Amends 0009 (the row marker gains six optional keys), 0022 (each fixed list gains a reason word for a reason the reader does not hold), 0088 (the example dashboard is exported as data, and drawn under any setting) and 0096 (the page documents the keys and the words, with generated examples). Built as slice 5.46, from issue 263.
A reader that redraws the dashboard from the published shape (0096) with the action’s own renderer, holding stack-level facts only and never a diff, was tried on 2026-09-25 and found five small gaps. Each is an addition to what a marker or the example carries. None changes a rule: the row state is still a cache, nothing is decided from any of the new keys, and the marker version stays 1 under 0009’s rule for new keys.
Decision
- A pending row’s marker carries the counts of its first line:
creates,updates,replacesandtracking, after every older key and in the order of the first line, each left out at 0.trackingis the changes that only touch the tool’s record of a resource, theN tracking onlyof the first line (0007).deleteskeeps its meaning from 0075, how many of the destroys are deletes, and is written as it was: wheneverdestroysis, 0 included.replacesis the same number asdestroyslessdeletes, and is written anyway, so a reader draws the line without arithmetic. A deploying row copiesdestroysanddeletesfrom the row it replaced and nothing else, as before. - A drifted row’s marker carries
changed, how many resources its drift check found changed outside the code, right aftergone(0075), left out at 0. Without it a reader that holdsgone="1"alone draws a drifted row with two findings as one resource gone, and a drifted row with nothing gone as nothing at all. A pending row that also shows drift keepsdrift="true"and neither count, as before. - A queued row’s marker carries
behind, the stack ids it waits behind, as a list likedepends-on(0059), last. It is the display cache 0009 foresaw: the fact isbehindon the deployment record (0056),resolveandsettleread the record and never the row, and a row that waits for its deploy window alone (0104) has none. - The example dashboard is data first.
scripts/example-dashboard.tsexportsEXAMPLE: the root facts, the rows, the trail, the outside deploys, the ignored stacks, the updates waiting to merge and on their checks, and the confirm box, before any setting is applied.exampleBodydraws the published body from it, and takes the settings ofsluiceway.yamla body is drawn under:redact,personality,timeZoneandreadOnly. A reader that wants the example under its own setting takes the data and the renderer, instead of the published file’s markers, which lose the made-up changes and the trail’s lines. - Each fixed list of 0022 gains a reason word for a reason the reader does not hold. For a deploy,
the reason is on the deployment record, because the reason of a failed deploy is the description of its status, which 0096 leaves out of the published shape. For a preview,the reason is in the summary of the run, because a preview failure has no record and its reason is in the summary and the result file. Both are constants with nothing filled in. Sluiceway never writes either: a scan and anapplyalways hold the reason. A reader writes them so a failure line or a preview failure row drawn from the facts alone keeps the action’s sentence, escaped and placed as the renderer places every reason, instead of words of its own. - The page documents all of it.
docs/what-sluiceway-writes.mdnames the six keys in the row table, in the order the writer writes them, and a generated example of the row markers shows each: the queued row behind the deploying one, a pending row with a create and an update, one with a replace, one with deletes and a tracking change, and a drifted row with a resource changed next to the one with a resource gone. A section under the row table says which two things a drawn row cannot take from a marker and gives the two reason words, with an example the renderer draws. The page also says that the example is data.
Considered
- One count,
changes, as the issue first put it. A reader with one number cannot draw2 updates, 1 create, which is what the row says and what the issue wanted. The five numbers of the first line are the counts. - Leaving
replacesout, since it follows fromdestroysanddeletes. Rejected: a documented key costs nothing to read and the four counts then have the same shape. - The counts on a deploying row, copied from the row it replaced like
destroys. Left out: a deploying row shows no counts, so a reader has nothing to draw from them. It is ondocs/later.mdwith the drift counts on a pending row’s marker, in case a reader asks. - One reason word for both lists,
the reason is on the record, the issue’s own phrasing. Rejected: a preview failure has no record, and a word that points somewhere should point at the right place. - Documenting the description of a deployment status instead of a reason word. Rejected: 0096 left it out so the fixed lists can be reworded, and the reason word keeps that freedom.
Consequences
- Every pending row’s marker grows by up to four keys and every queued row’s by one. On the 58 stack fixture that is well under one percent of the body, inside the size budget’s room (0028).
- Every writer already carries keys it does not know, so a body one version wrote reads in the next and back (0009).
- A test holds the published example to the renderer over the exported data, and holds a redraw under another setting to every stack of the example.
- The written surface tests hold the page’s row table to the keys the writer writes, in order, and the two drawn rows to the renderer and the fixed lists.