refresh: ask who authorised a run, not whether it is CI
Both overrides stand in for a person deciding something, and the gate that enforced it asked the coarser question. `isCi()` got the case that matters wrong: a `workflow_dispatch` sets CI=true, so somebody clicking "Run workflow" was refused exactly as the cron was, which made both flags unreachable from the workflow at all. A dispatch is a person, and a better-evidenced one than a local shell — GitHub records which one, and the run log keeps it. `runAttendance` draws the line where it belongs: a local shell is a person, a dispatch is a person and names the actor, and a schedule — or any other runner event, erring that way on purpose — is not. The run now prints which override was used and who authorised it, because a local shell leaves no trace anybody else can read. The schedule stays refused, and for the robots override that is not ceremony. From an address that gets a challenge we never receive robots.txt at all, so a cron standing on the recorded permission has no way to notice the host withdrawing it, and that permission has no expiry. The challenge-or-refusal narrowing does not close this: a plain 403 still stops us, but a robots.txt edited to disallow us would be invisible, because a challenge arrives instead of a file. A person re-reading it is the only thing that ever re-validates it. Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
This commit is contained in:
co-authored by
Claude Opus 5
parent
d0b0f2e00c
commit
2fb944135d
+6
-1
@@ -292,7 +292,12 @@ section but must never claim the event title.
|
||||
challenge page's markers; a `403` whose body cannot be read is unclassifiable and therefore not
|
||||
excused.
|
||||
- It never overrides a `robots.txt` we *could* read, so a file that disallows us still says no.
|
||||
- It is refused under CI, because it stands in for a human and there is none on a runner.
|
||||
- **It is refused on an unattended run, not on every runner.** `runAttendance` asks who asked: a
|
||||
local shell and a `workflow_dispatch` are both a person (the latter better evidenced — GitHub
|
||||
names the actor), while a `schedule` or any other runner event is not. The `schedule` refusal is
|
||||
load-bearing rather than ceremonial: from a challenged address `robots.txt` never arrives, so a
|
||||
cron standing on the recorded permission could never see the host withdraw it, and the recorded
|
||||
permission has no expiry.
|
||||
|
||||
Every host it applied to is named in the run's warnings and in `summary.assumedRobots` — an
|
||||
override that reports nothing is one nobody withdraws. It changes no other obligation: still one
|
||||
|
||||
Reference in New Issue
Block a user