docs/decisions/0019-code-under-another-licence.md decides that an experiment may
bring in code under another licence only inside experiments/<slug>/borrowed/,
carrying experiments/<slug>/borrowed/LICENSE, declared by a Borrowed: field in
the experiment record naming the source and the licence.
Nothing refuses a violation of any of that, and the record says so at the rule:
git grep -n 'Nothing in this repository refuses a violation of this rule today' origin/main -- docs/decisions/0019-code-under-another-licence.md
Entry two of the plan's decision issue answered that the check holding the rule is
ordinary gate work rather than a new apparatus, which is true of this tree: the
runner already walks experiments/, already reads the header, and already refuses
a header field that disagrees with the tree it sits in. This is the issue that
builds it, and it is opened because a rule with no mechanism and no issue is a rule
that stays prose by default rather than by decision.
The field comes first and it is a change to the format. Borrowed: is not one
of the fields the record format carries:
git grep -n 'Field[A-Za-z]* = "' origin/main -- internal/check/record.go
Adding it goes through docs/decisions/0013-how-the-record-format-changes.md, so
the format change is the prerequisite rather than part of this work, and this issue
should not invent the field by refusing against it.
What the refusals are, once the field exists. Each is either present or absent in
the text, and each needs its own fixture tripping exactly it and no other, which is
what the harness under testdata/cases/ compares.
A borrowed/ directory with no licence file beside it. That is the quarantine
without the thing that makes it one, and it is the failure the layout exists to
prevent: a directory a reader takes for quarantined that declares nothing.
A record declaring Borrowed: with no borrowed/ directory in the experiment, and
a borrowed/ directory in an experiment whose record declares no Borrowed:. Two
directions of one disagreement, and which of the two is wrong decides the repair,
so the message names both sides rather than restating the rule.
What no reading of this tree can decide, and the check must not pretend to.
Whether the licence file names the licence the code is actually under is a
judgement about the world, not about the tree. So is whether the borrowed code is
compatible with promotion into a board under other terms, which 0019 explicitly
leaves undecided. A green run means the layout and the declaration agree, and the
check has to say that where it is defined, because a green run is otherwise read as
the licensing having been checked.
Done when the runner refuses each case above, each has a fixture in the suite that
trips exactly that refusal and no other, each message names the experiment and both
sides of the disagreement, the check record says in its own words what a green run
does not prove, and the run passes on the current tree.
docs/decisions/0019-code-under-another-licence.mddecides that an experiment maybring in code under another licence only inside
experiments/<slug>/borrowed/,carrying
experiments/<slug>/borrowed/LICENSE, declared by aBorrowed:field inthe experiment record naming the source and the licence.
Nothing refuses a violation of any of that, and the record says so at the rule:
Entry two of the plan's decision issue answered that the check holding the rule is
ordinary gate work rather than a new apparatus, which is true of this tree: the
runner already walks
experiments/, already reads the header, and already refusesa header field that disagrees with the tree it sits in. This is the issue that
builds it, and it is opened because a rule with no mechanism and no issue is a rule
that stays prose by default rather than by decision.
The field comes first and it is a change to the format.
Borrowed:is not oneof the fields the record format carries:
Adding it goes through
docs/decisions/0013-how-the-record-format-changes.md, sothe format change is the prerequisite rather than part of this work, and this issue
should not invent the field by refusing against it.
What the refusals are, once the field exists. Each is either present or absent in
the text, and each needs its own fixture tripping exactly it and no other, which is
what the harness under
testdata/cases/compares.A
borrowed/directory with no licence file beside it. That is the quarantinewithout the thing that makes it one, and it is the failure the layout exists to
prevent: a directory a reader takes for quarantined that declares nothing.
A record declaring
Borrowed:with noborrowed/directory in the experiment, anda
borrowed/directory in an experiment whose record declares noBorrowed:. Twodirections of one disagreement, and which of the two is wrong decides the repair,
so the message names both sides rather than restating the rule.
What no reading of this tree can decide, and the check must not pretend to.
Whether the licence file names the licence the code is actually under is a
judgement about the world, not about the tree. So is whether the borrowed code is
compatible with promotion into a board under other terms, which
0019explicitlyleaves undecided. A green run means the layout and the declaration agree, and the
check has to say that where it is defined, because a green run is otherwise read as
the licensing having been checked.
Done when the runner refuses each case above, each has a fixture in the suite that
trips exactly that refusal and no other, each message names the experiment and both
sides of the disagreement, the check record says in its own words what a green run
does not prove, and the run passes on the current tree.