Skip to content

Record four answers from the plan decision issue - #193

Merged
iderex merged 4 commits into
mainfrom
records/four-answers-from-the-plan-decision-issue
Aug 26, 2026
Merged

iderex merged 4 commits into
mainfrom
records/four-answers-from-the-plan-decision-issue

Conversation

@iderex

@iderex iderex commented Aug 26, 2026

Copy link
Copy Markdown
Contributor

Closes #179
Closes #181
Closes #183
Closes #185

Four answers from #46 written down where a decision lives. Four records
under docs/decisions/ and nothing else, which is why they share one
branch: each separate landing moves the mainline under the others, and
these four touch no file any of them shares.

What this changes

0018-the-licence-of-this-board.md, for #179. GPL-3.0, and one licence for
both the runner and the experiment content. The reason is the direction a
result actually moves: the twelve plugin boards of this organisation all
carry GPL-3.0, so a hand-over under record 0005 names terms the receiving
board already has, and three other boards carry AGPL-3.0, which is why the
record calls this a choice between two neighbourhoods rather than a house
style. It carries the cost in the permissive direction, lists the four
options entry one names with what each would have cost, and says three
things a reader would otherwise assume: that the file at the root is
AGPL-3.0 today so the answer and the file disagree until #47 lands, that
what this repository declares to the checks is empty and is a different
thing from what the platform detects, and that adding a licence does not
place the commits made before it under those terms.

0020-consent-to-promote-under-other-terms.md, for #181. A result may be
promoted into a board under different terms only with the contributor's
explicit consent, given at promotion time, written as a Consent: line in
the promotion section. The record names record 0005 and says what moved,
and it does not supersede it, because everything else 0005 fixes stands
and a supersession line would tell a reader the whole of it had been
replaced. What that costs is written rather than left to be found: 0005's
sentence that the section names four things is wrong read on its own, and
nothing in 0005 says so. It states that the sign-off gate does not cover
this, and that a step at promotion time is a step that will sometimes be
skipped.

0022-how-long-a-held-back-record-waits.md, for #183. Ninety days from the
report, published in the security policy, with exactly one written
extension on a reasoned request. It names record 0010 and says what
moved. The design question it had to settle is settled as a field beside
the state rather than as a fourth state: the record stays in asking and
carries a Held-back: date, and the listing prints that as its own dated
line.

0024-who-may-run-an-experiment-here.md, for #185. This board takes
experiments from anybody. It names the three rules a newcomer must have
read, says the answer belongs in the first paragraph of CONTRIBUTING.md
with those three linked from it, and lists both rejected options with what
each would have cost.

Means: Markdown under docs/decisions/, which is the form record 0000
fixes for a decision record and the one three checks already read. It adds
no language, no runtime and no dependency, and decision-record-is-missing-a-section,
two-decision-records-share-a-number and
supersession-names-a-record-that-is-not-there judge these four exactly as
they judge the twenty-one already there.

What failure it prevents

A decision that exists only in an issue. Record 0000 says it plainly: the
record is what survives the argument, and a decision that lives in a
tracker thread has no current state, reads as three decisions where it was
revised twice, and loses its source the day the tracker moves. Four answers
were taken on 2026-08-24 and four issues were opened to write them down;
until they are written down the plan depends on four sentences in a closed
issue.

The second failure is narrower and is the reason each record is longer than
its answer. Every one of these four answers has a cost that lands on
somebody who did not take it, and a record that carries the answer without
the cost reads as though the answer were free. The permissive direction
closing, a consent step that will be skipped under pressure, an extension
request nobody answers, and three unenforced rules a newcomer has to have
read are each written at the answer they belong to.

What was run

At 29bd767ca5881079b0c81c8af9d5f190b01dd1f0, the commands CONTRIBUTING.md
names, from the root of the checkout:

$ go build ./cmd/... ./internal/...

$ go vet ./cmd/... ./internal/...

$ gofmt -l cmd internal

$ go run ./cmd/lab check .
examined .
1 experiment directory walked, 1 record read
25 decision records read
the time this run read is 2026-08-26T01:17:01Z
0 refused

$ go test -count=1 ./cmd/... ./internal/...
ok  	github.com/Flowfin/lab/cmd/contexts	6.284s
ok  	github.com/Flowfin/lab/cmd/lab	13.657s
ok  	github.com/Flowfin/lab/cmd/notices	65.059s
ok  	github.com/Flowfin/lab/cmd/pullrequest	5.547s
ok  	github.com/Flowfin/lab/internal/check	5.803s
ok  	github.com/Flowfin/lab/internal/contexts	5.522s
ok  	github.com/Flowfin/lab/internal/hardware	5.539s
ok  	github.com/Flowfin/lab/internal/invariants	5.869s
ok  	github.com/Flowfin/lab/internal/notices	4.810s
ok  	github.com/Flowfin/lab/internal/prose	4.852s
ok  	github.com/Flowfin/lab/internal/pullrequest	4.870s

The prose format is the check most likely to be moved by four new
documents, so it was read rather than assumed:

$ go test ./internal/prose -run TestThisRepositorySatisfiesTheProseFormat -count=1 -v
        39 prose files read, and testdata is not read
--- PASS: TestThisRepositorySatisfiesTheProseFormat (0.00s)

Every command each record pastes was run before the sentence resting on it
was written, and two pastes were corrected against what the command
returned rather than against what was expected. The licence readings were
taken one repository at a time through gh api repos/Flowfin/<name> --jq '.license.spdx_id', which is the reading behind the twelve and the three;
the loop the record hands a reader derives the same population and was not
the command that produced those numbers.

This change removes no tracked path.

What this does not do

None of the four records is a mechanism, and each says so where it matters.
0020 says nothing refuses a promotion section that names no consent
today, and that the route that would change it is record 0013, which also
forbids the shape a reader would reach for first. 0022 says the field it
introduces is optional under 0013, so a held-back record that omits it is
not refused and sits in asking saying nothing, and that record 0003 and
record-state-is-not-one-of-the-three stay exactly as they are, so the
listing prints a line no refusal governs. 0024 says nothing refuses a
violation of any of the three rules it names, and lists what the
credential-shape scan cannot see rather than leaving the scan to be read as
cover.

Two edits these records say are owed are not in this change, and neither is
in the done-condition of the issue that asks for the record. The ninety days
has to reach SECURITY.md, and it is not there. The answer to entry eight
has to reach the first paragraph of CONTRIBUTING.md with the three rules
linked from it, and that paragraph carries none of it. Both are named in the
records as owed and each needs its own issue.

0018 does not change the licence file. The root of this branch still
carries AGPL-3.0 and the platform still reports it; #47 is what lands the
file, the declaration and the line in README.md, and until it does the
record and the file disagree.

This board has no second reader tonight. What stands in place of one is the
evidence above: every record is judged by the three decision-record
refusals in the run quoted, the prose format was read at the pushed commit,
and every command pasted inside the records reproduces at origin/main.

iderex added 4 commits August 26, 2026 03:14
Entry one of #46 is answered and #179 asks for the record. GPL-3.0, and
one licence for both the runner and the experiment content.

The reason is where a result goes when it is wanted: the twelve plugin
boards of this organisation all carry GPL-3.0, read one repository at a
time through the platform's licence field, so a hand-over under record
0005 names terms the receiving board already has. Three other boards
carry AGPL-3.0, which is why the record calls this a choice between two
neighbourhoods rather than a house style.

The record carries the cost in the permissive direction, because that
cost is real and does not go away by being unwritten, and it lists the
four options entry one names with what each would have cost.

Three things it says that a reader would otherwise assume. The file on
the default branch is AGPL-3.0 today, so the answer and the file
disagree until #47 lands. What this repository declares to the checks
that read a licence is empty and is a different thing from what the
platform detects. And adding a licence does not place the commits made
before it under those terms.

Refs #179.

Signed-off-by: Nils Lehnen <30603423+iderex@users.noreply.github.com>
Entry three of #46 is answered and #181 asks for the record. A result
may be promoted into a board under different terms only with the
contributor's explicit consent, given at promotion time.

The consent is a Consent line in the promotion section rather than a
conversation somebody remembers, because the question it gets asked in
is whether a contributor agreed months after the person who asked them
has stopped thinking about it.

The record names record 0005 and says what moved: that section now names
a fifth thing. It does not supersede 0005, because everything else that
record fixes stands and a supersession line would tell a reader the
whole of it had been replaced. What that costs is written down rather
than left for a reader to hit: 0005's sentence that the section names
four things is wrong read on its own, and nothing in 0005 says so.

What reads the line is stated as it stands. The property that reads the
promotion section names four things today, so nothing refuses a section
that names no consent, and the route that changes it is record 0013.
That route also decides the shape: a refusal on an absent field is what
0013 forbids, and the available shape is the one the four fields already
have. No record on this board carries a promotion section today, so the
fifth name reddens nothing when it lands.

The sign-off gate is named as not covering this. What a contributor
certifies there is their right to contribute under this project's
licence, which says nothing about a different licence elsewhere.

Refs #181.

Signed-off-by: Nils Lehnen <30603423+iderex@users.noreply.github.com>
Entry six of #46 is answered and #183 asks for the record. Ninety days
from the report, the window published in the security policy, and
exactly one written extension on a reasoned request.

The record names record 0010 and says what moved. That record decides
which experiments do not start here in public and what has to be true
before the record is written, and says in its own words that the waiting
and the listing are not decided there. Both are decided here and nothing
else in 0010 moves.

What the listing shows while a record waits is settled as a field beside
the state rather than as a fourth state. The record stays in asking and
carries a Held-back date, and the listing prints that as its own dated
line, which discloses that something exists and nothing a reader could
act on.

Where that answer is not free is written at it. Record 0003 and
record-state-is-not-one-of-the-three stay exactly as they are, so the
listing prints a line no refusal governs, and the field is optional
under record 0013, so a held-back record that omits it sits in asking
with a question that says nothing and nothing refuses that.

The ninety days is not in SECURITY.md today and the record says so. It
also separates the window from that file's existing sentence about there
being no response deadline, which runs in the opposite direction and
stands.

Refs #183.

Signed-off-by: Nils Lehnen <30603423+iderex@users.noreply.github.com>
Entry eight of #46 is answered and #185 asks for the record. This board
takes experiments from anybody.

The residual is what the record is mostly for. The cost is not review
effort. It is that three rules here depend on a person having read them
before they start, and somebody arriving for the first time is the
person least likely to have read any of them.

The three are named rather than gestured at: what may never be
committed, in record 0006 and in the contributing guide; what happens
when an experiment finds a flaw in shipped software, in record 0010; and
what an experiment may do with real data, which is the one this board
has not finished writing.

Nothing refuses a violation of any of the three, and the record says so
with the guide's own line. The nearest thing to a mechanism is the
credential-shape scan, whose source calls itself a floor and not a
guarantee, and what it cannot see is listed rather than implied.

The answer belongs in the first paragraph of the contributing guide with
the three linked from it. That guide carries none of this today, so the
record fixes where the sentence goes and says the edit is owed.

Refs #185.

Signed-off-by: Nils Lehnen <30603423+iderex@users.noreply.github.com>
@iderex iderex self-assigned this Aug 26, 2026
@iderex
iderex merged commit a71e977 into main Aug 26, 2026
25 checks passed
@iderex
iderex deleted the records/four-answers-from-the-plan-decision-issue branch August 26, 2026 01:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

1 participant