A conduct report has a route, and the first release has a changelog - #234
Merged
Merged
Conversation
#10) CODE_OF_CONDUCT.md did not exist, so the only route visible to somebody with a conduct problem on a public board was a public issue, which names the person it is about to everybody before anybody has read it. That is the same failure SECURITY.md was written against, one file over. The routes are the two decided on #10 on 2026-09-04, in that order: the private report form on this repository, then a message through GitHub to the account that holds it. No mailbox is named, here or anywhere else on this board. The document says what I can actually do about a report, that one person holds it with no appeal, and that nothing in this repository enforces a word of it. SECURITY.md carried three readings that had stopped reproducing, and the first of them was routing reporters the wrong way. It said the private form does not answer, quoting {"enabled":false} taken on 2026-08-19, and offered a public issue as the honest alternative until it opened. The form is open: gh api repos/Flowfin/lab/private-vulnerability-reporting {"enabled":true} Run 2026-09-05. So the public-issue fallback is gone, and the file now says a report sent anywhere else is not received, which is the decision on #10 rather than a tightening chosen here. It said nothing is published as a binary, quoting two empty lists. Both answer with one entry now, so there is an artefact somebody can have downloaded, and a policy telling a reporter there is none to have been tampered with was excluding the one class this board has just created. A published artefact that does not match its checksum or its signature is now named as a report I want, and the covered set names the most recent release beside the default branch. It said thirteen files in .github/workflows, checked for pull_request_target and workflow_run. There are fifteen, and I re-ran the four claims that paragraph makes over all of them rather than carrying the sentence forward. Signed-off-by: Nils Lehnen <30603423+iderex@users.noreply.github.com>
…#44) There is a release and a tag on this board, which is what #44 has been waiting on since it was opened: gh api repos/Flowfin/lab/releases --jq 'length' 1 gh api repos/Flowfin/lab/tags --jq 'length' 1 Somebody now holds a version of this runner, and until this commit the tree answered neither of the two questions that produces. Which version do I have was answered by the binary already. What changed was answered by nothing, and the board is allowed to break its own tool between versions, which is exactly why that has to be written down rather than left to a reader comparing two commits. CHANGELOG.md carries an entry for v0.1.0 and the compatibility position in front of it. The position is that there is no promise of stability and that a change is not made silently: a change invalidating records already on the default branch is announced in the entry for the release that carries it, the record under docs/decisions/ is still where such a change is decided, and the exit codes are the one part of the runner anything may key on. The entry reads the published artefact rather than a build made here. The digest was checked against SHA256SUMS and the signature over that file verified against the keys the platform publishes for the account, before the version output in the entry was taken from the binary that came out of it. docs/operator-guide.md said in the present tense that there is no changelog in this repository and no release for one to carry an entry for, so that a format change was announced by the record deciding it and by nothing else. That is the sentence #44 says moves into the changelog when one lands, and this is it moving: the page now points at CHANGELOG.md as the place somebody running a version finds out about a change. That pointer carries a guard rather than resting on somebody noticing, and I proved it bites rather than reading the code for it. The invariants path leg resolves a link naming a file above the document, which is the reading a document under docs/ needs to reach the root. With CHANGELOG.md moved out of the tree: go test ./internal/invariants -run TestThisRepositorySatisfiesTheInvariants -count=1 --- FAIL: TestThisRepositorySatisfiesTheInvariants docs/operator-guide.md: it names CHANGELOG.md, which is not in this tree (document-names-a-path-that-does-not-resolve) and green again with it back. The path in that output is written with the separators the host uses; this machine is on Windows. `lab check .` does not refuse it and I checked that too before writing this: the path leg is a repository invariant rather than a record check, so the walk stays green over a document pointing at nothing. Naming the wrong route here would have been a claim that a route nobody runs holds the pointer. Signed-off-by: Nils Lehnen <30603423+iderex@users.noreply.github.com>
This was referenced Sep 5, 2026
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.
Closes #10
Closes #44
Two issues in one pull request, both landing documents and nothing else. They
share a branch because separate landings of document-only changes move the
mainline under each other and the queue stops converging. Each is one commit, so
the two topics are separable in the history.
What this changes
#10 - a conduct report has a route, and the security policy stops sending
reporters the wrong way.
CODE_OF_CONDUCT.mdis new. The routes are the two decided on #10 on2026-09-04, in that order: the private report form on this repository, then a
message through GitHub to the account that holds it. No mailbox is named. The
document says what I can actually do about a report, that one person holds it
with no second reader and no appeal, and that nothing in this repository
enforces a word of it.
SECURITY.mdcarried three readings that had stopped reproducing.{"enabled":false}from2026-08-19, and offered a public issue as the honest alternative until it
opened. The form is open. The fallback is gone and the file now says a report
sent anywhere else is not received.
release and a tag. A published artefact that does not match its checksum or
its signature is now named as a report I want, and the covered set names the
most recent release beside the default branch.
.github/workflows. There are fifteen, and I re-ranthe four claims that paragraph makes over all of them.
#44 - there is a changelog, because there is now a release to write an entry
for.
CHANGELOG.mdis new, with an entry forv0.1.0and the compatibility positionin front of it: no promise of stability, and a change not made silently. A
change invalidating records already on the default branch is announced in the
entry for the release carrying it; the record under
docs/decisions/is stillwhere such a change is decided; the exit codes are the one part of the runner
anything may key on.
docs/operator-guide.mdsaid in the present tense that there is no changelogand no release for one to carry an entry for. That is the sentence #44 says
moves into the changelog when one lands, and this is it moving.
No path leaves the tree in this change.
What failure it prevents
Somebody with a conduct problem on a public board had one visible route, which
was an issue that names the person it is about to everybody before anybody has
read it. That is the outcome
SECURITY.mdexists to prevent for avulnerability, and it was unprevented one file over.
Beside it,
SECURITY.mdwas telling a reporter that the private form does notanswer and that a public issue is the honest alternative, while the form was
open. It was also telling them there is no published artefact to have been
tampered with, the day after this board published a signed release of six
binaries. A
security policy that is wrong about its own route sends the report to the one
place it was written to keep it out of.
For the changelog: this board is allowed to break its own tool between versions,
and somebody is now running a version of it. Without a changelog the only answer
to what changed is a reader comparing two commits, and a format change that
invalidated their records would reach them as a broken run rather than as a
sentence.
What was run
At
205201a97690df0326d61cbbe969d949345d136e, the head being pushed, onWindows.
The
-vrun was made as well and is not pasted, because its output is the wholesuite. What it prints that the summary above does not is the line saying the
integration-hardware harness was not asked for and what asking would cost, and
that leg was not asked for here.
The pointer this change adds is guarded, and I proved the guard bites rather
than reading the code for it. With
CHANGELOG.mdmoved out of the tree:and
okwith the file back. The separators in that path are the host's.lab check .stays green over the same missing file, which I checked beforeclaiming the route: the path leg is a repository invariant rather than a record
check.
The readings the two documents now quote, taken at the moment they were
written into them rather than recalled:
Fourteen of the fifteen check out the repository and every one of those passes
persist-credentials: false; the fifteenth,smoke.yml, checks nothing out.Every one of the fifteen declares
permissions: {}or a read-only scope at thetop level, read file by file rather than sampled.
The
v0.1.0output quoted in the changelog is the published asset, not abuild made here:
The allowed-signers file was built from
https://api.github.com/users/iderex/ssh_signing_keys, which is the route therelease notes give, rather than from a key shipped beside the signature.
What this does not do
No second reader read this. The rule is that nothing reaches the mainline
that only its own author has read, and this change breaks it: there is nobody
else on this board tonight. What stands in place of a reader is the evidence
above, which is weaker than a person and is not offered as equivalent. The
sentence stays as it is if somebody reads the change later.
The community-standards clause of #10 is not readable until this merges.
gh api repos/Flowfin/lab/community/profile --jq '.files.code_of_conduct'answers
nullwhile the file is on a branch. I read the same field across everyrepository in this organisation: eight answer with a key rather than
null, andsix of those eight carry a document the platform classifies as
otherratherthan a recognised text, so a custom document is enough for the page to list one.
The clause is expected to pass on merge rather than proved to.
Nothing enforces the conduct document, which it says about itself. Every leg
of the run judges bytes in the tree and how somebody spoke to somebody else is
not one.
No check reads the changelog. Nothing refuses a release published without an
entry, and nothing compares the entries here against the releases on the
platform. What holds the link from
docs/operator-guide.mdis the path legabove; the content of an entry is held by nothing.
The private form was read with administrative access. A reader of this board
cannot run
gh api repos/Flowfin/lab/private-vulnerability-reporting, and both documentssay so where they quote it. What a reader can do is open the address and see
whether the form is there.