Record the means and the dependency rule (#11, #103) - #181
Merged
Conversation
Entry 2 of #1 was answered on 2026-08-24 with Rust and a foreign function interface per platform, and this record is the reasoning that an answer to a question cannot carry: what the choice costs in build legs, runtimes and a generated binding, what it forecloses, and what would reverse it. The half that is new rather than transcribed is the last section but one. Eleven landed records wrote conditions against a language nobody had chosen, and each is answered here from a program compiled against the toolchain rather than from recollection. Four are met: the two lanes 0009 owns, the connection attempt 0027 and 0069 need bounded separately from a read, the single construction point 0037 requires, and the per-field classification 0071 rests on. Three are not: no source of unpredictable bytes on a stable build, no cryptographic digest, and no promise that a credential's bytes are cleared. Each of the three is left where the record that raised it already put it, and 0041's reversal condition is reached rather than glossed. The failure this prevents is the language being chosen by the first file. Without the record the choice is made by whoever needs to compile something, is then defended by the work resting on it, and those eleven conditions are met or missed by accident. The five absences it measures are the second half: a hole met at a call site is filled with whatever the person at that call site reached for, and naming them together before any call site exists makes them one question for #103 instead of five answers nobody compared. The exact pinned version stays with #14, the layout with #13, the target set with #113 and the dependency rule with #103, and the record says so rather than deciding them in passing. Signed-off-by: Nils Lehnen <30603423+iderex@users.noreply.github.com>
Both entries this waited on are answered. The repository publishes under AGPL-3.0-or-later, so the licence set can be named as a list rather than as a principle, and 0011 measures which facilities the means does not supply, so the rule is written against the holes it actually has to cover. The record answers the five questions the issue asks and adds a sixth the issue does not. 0041 requires a cryptographic digest, 0105 rests on the same requirement, and the standard library has none, so a landed record already needs a dependency. A rule written without that case would refuse the digest under a clause nobody wrote for it, and the repair would be a supersession of two records rather than a line here. The clause admits a dependency on the authority of the record that stated the requirement, and is bounded to that requirement so a package cannot arrive carrying a second thing. The four outright refusals are the ones the issue names, each tied to the record it would overturn: 0069 for a node with its own network reach, 0040 for one that picks its own storage location, 0009 for one that starts a thread the core does not own, and 0071 with 0100 for one that writes to a log. A fifth is added from a worked case rather than from a principle: 0061 refused a tracing library partly because its spans carry attributes, so a redaction rule would have to reach a second facility. The failure this prevents is a rule with ten exceptions in it. There is no code and therefore no graph, which is the only moment the rule can be written without each clause being argued against work already resting on it. Nothing in this repository refuses a dependency admitted by no clause, and the record says so in its own text rather than leaving a reader to assume a mechanism. Signed-off-by: Nils Lehnen <30603423+iderex@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The issues this belongs to
Closes #103
It also carries the record #11 asks for. #11 is named rather than closed here,
because the second half of its done-condition is that every M2 issue naming it as
a blocker has been updated, and that happens on those issues after this lands
rather than in this diff.
Two issues in one pull request, deliberately. Both land only decision records, and
a separate landing for each moves the mainline under the other while it is open.
The two records are also the pair that has to be read together: #11 measures five
facilities the standard library does not supply, and #103 is the rule that decides
what may fill them.
What changed
Two decision records and their two index lines. Nothing else in the tree.
0011records the language, the toolchain and the binding layer. The choice camefrom entry 2 of #1, answered on 2026-08-24. The record carries what an answer to a
question cannot: the cost in build legs, runtimes and a generated binding, what
the choice forecloses, what would reverse it, and one section that is not a
transcription of anything - each condition the eleven landed records wrote against
a language nobody had chosen, answered from a program compiled against the
toolchain.
0103records what admits a dependency and what is refused. It answers the fivequestions the issue asks, names the licence set as an explicit list rather than as
a principle, and adds a sixth clause the issue does not ask for: a dependency that
a record already standing requires, which is the case 0041 and 0105 create and the
one a rule written without it would refuse under a clause nobody wrote for it.
The means, and why it fits
Markdown under
docs/decisions/, which is the means0001already fixed for adecision on this board. The rule it has to carry is that a claim carries the
command that produced it, and an indented block holding a command and its output
carries that in a form a reader re-runs; nothing here is a guard, so no refusable
property or ledger row is owed. Choosing anything else would put two record
formats in one directory.
What failure it prevents
For
0011: the language being chosen by the first file. Without the record thechoice is made by whoever first needs to compile something, is then defended by
the work already resting on it, and the eleven conditions are met or missed by
accident rather than checked. This has not happened here - there is no code yet -
so it is a failure expected rather than one already met.
For
0103: a rule with ten exceptions in it. There is no code and therefore nograph, which is the only moment the rule can be written without each clause being
argued against work already resting on it. The narrower half is already visible:
0011measures five absences, and a hole met at a call site is filled withwhatever the person at that call site reached for.
Evidence
Every measurement in
0011was produced by compiling or running a program againstthis toolchain, and each block in the record carries the program and the command
above its output.
The four conditions the means meets, the three it does not, and the two toolchain
bounds on the detector in #117 are each in the record with their own block. The
one that decides the most is the detector, because 0009 does not accept an
unproven calling-thread guarantee: the flag is a nightly one, and the sanitizer is
supported on the Linux and Apple targets and absent on the Android and Windows
ones. Both readings are in the record with the commands that produced them.
The licence the set in
0103is derived from:The size of the change, because it is over the 400-line figure this organisation
inherits as a readable cap:
What holds across every one of those bytes is one property: each is a decision
record in the shape
0001fixes, or the index line that record requires besideit. There is no second topic inside the count.
Every changed path is inside the directory the two issues are about:
The document check that judges named paths was run over the two new records and
the index before this was pushed. The whole-tree verb did not finish inside nine
minutes on this machine, so the rules were applied to the three changed documents
instead, through the script's own functions rather than a second copy of them:
That is fifty-two named paths resolved in the index, none excused, and no refusal
anywhere. The run in this pull request is the one over the whole tree.
What this does not cover
The whole-tree document check was not run to completion here, for the reason
above. What ran covered the three documents this change touches and nothing else,
so a path broken elsewhere in the tree by something else would not have been seen
by it.
0011does not pin a version, name a directory layout, choose target triples orpick a binding generator. Those are #14, #13, #113 and a later record under
#103's rule, and the record says so rather than deciding them in passing.
0103is not enforced by anything. No check in this repository reads the clauseline beside a manifest entry, and there is no manifest yet. The record states that
about itself.
Three of the conditions
0011answers are answered "not met": no source ofunpredictable bytes on a stable build, no cryptographic digest, and no promise
that a credential's bytes are cleared. None of them is softened, and none of the
records that raised them is superseded here - each already wrote the outcome as a
case rather than as a failure.
The claim about a credential's bytes is a claim and not a measurement, and the
record says which it is: the reading that would prove it is a read of freed
memory.
Nothing here was built, compiled into this repository, or tested by a suite,
because this repository has no code. The programs the record quotes were compiled
outside the tree and are reproduced in it in full so that a reader can run them.
Who has read it
Nobody but me. There is no second reader on this board tonight, and the evidence
above stands in place of one.