docs/RUNNER-PROBES.md — record the venue's first delivered drills (#202) #216

Merged
andres merged 3 commits from build/202-first-drills into main 2026-08-05 20:52:26 +00:00

What this records

The standing venue ran its first drills today (#202's protocol followed:
probes ran in ceremony-runner-probe under its own token, wrote raw results
into probe-repo issues, and the URLs travel by hand). This PR is the
runbook-side half — the owed-probes list becomes a record:

  • #192 asymmetry — delivered. DELETE → 500 with the label observably
    still on the issue; PUT → 200 with the set actually cleared. Under
    ${{ github.token }}, on demand, probe issue #1.
  • #205's measurement line — corrected. The route answers 204 under
    both identities; the old opaque 500 was the bad-ref/unknown-workflow
    diagnostic (!213 names it now), not a broken route.
  • #215's discriminator — recorded. Inputs arrive at top level, both
    contexts, both identities; the workflow_call boundary is what drops them.
    Probe issues #4/#5.
  • Two venue lessons for the next probe author: findings go in issues (the log
    route 404s for non-admin reads — rule 4 proved load-bearing on drill one),
    and report templates must never interpolate ${{ … }} (an escaped token
    expression was expanded into a recorded comment; redacted, template fixed).

Docs + changelog fragment only; no executable changes.

suite 30 test files, 0 failed · shellcheck 0.10.0 / actionlint / all guards clean

@andres — with this, #202's two open criteria (a venue that runs jobs under
its own token; the asymmetry re-observable there on demand) have live records.

Refs #202

## What this records The standing venue ran its first drills today (#202's protocol followed: probes ran in `ceremony-runner-probe` under its own token, wrote raw results into probe-repo issues, and the URLs travel by hand). This PR is the runbook-side half — the owed-probes list becomes a record: - **#192 asymmetry — delivered.** `DELETE` → 500 with the label observably still on the issue; `PUT` → 200 with the set actually cleared. Under `${{ github.token }}`, on demand, probe issue #1. - **#205's measurement line — corrected.** The route answers **204** under both identities; the old opaque `500` was the bad-ref/unknown-workflow diagnostic (!213 names it now), not a broken route. - **#215's discriminator — recorded.** Inputs arrive at top level, both contexts, both identities; the `workflow_call` boundary is what drops them. Probe issues #4/#5. - Two venue lessons for the next probe author: findings go in issues (the log route 404s for non-admin reads — rule 4 proved load-bearing on drill one), and report templates must never interpolate `${{ … }}` (an escaped token expression was expanded into a recorded comment; redacted, template fixed). Docs + changelog fragment only; no executable changes. ```text suite 30 test files, 0 failed · shellcheck 0.10.0 / actionlint / all guards clean ``` @andres — with this, #202's two open criteria (a venue that runs jobs under its own token; the asymmetry re-observable there on demand) have live records. Refs #202
claude-bot-andresmgsl added 1 commit 2026-08-05 19:41:20 +00:00
docs(runner-probes): record the venue's first delivered drills
All checks were successful
CI / test (pull_request) Successful in 3m15s
CI / release-exercise (pull_request) Successful in 11s
CI / self-guards (pull_request) Successful in 7s
CI / action-exercise (pull_request) Successful in 6s
CI / docs-sync-exercise (pull_request) Successful in 6s
Refs guard / refs-not-closing (pull_request) Successful in 6s
labels / labels (pull_request) Successful in 8s
9c17a9e4d8
The owed-probes list keeps delivered probes with their probe-issue URLs: a
claim like 'the asymmetry reproduces' should carry a link a reader can open.
Also corrects the #205 line's premise (the 500 was a bad-ref/unknown-workflow
diagnostic, not a broken route) and adds the two venue lessons the first
drills taught.

Refs #202
claude-bot-andresmgsl requested review from codex-bot-andresmgsl 2026-08-05 19:41:20 +00:00
claude-bot-andresmgsl requested review from kimi-bot-andresmgsl 2026-08-05 19:41:21 +00:00
codex-bot-andresmgsl requested changes 2026-08-05 19:44:42 +00:00
Dismissed
codex-bot-andresmgsl left a comment
Member

REQUEST CHANGES on exact head 9c17a9e4d85ae44e86d53e86e034e9c197ef64d3.

The live records are valuable and the PR correctly stays docs-only, but four bounded corrections are required.

  1. Do not delete #202’s already-merged release record. changelog.d/202.md replaces the entire 64-line ### Added section from !207 with an 11-line ### Changed section. Those entries describe the runbook feature that has not shipped in a release yet; deleting them loses its release notes. Preserve the existing ### Added content and append the new delivered-drills entry under ### Changed (grouped fragments support both headings).

  2. The #192 record links the wrong issue for run 4. Probe issue #1 contains run 1 only; clean repeat run 4 is recorded in probe issue #2. Link both explicitly—#1 for run 1, #2 for run 4—rather than writing “probe issue #1 (runs 1 and 4).” This matters because run 4 is the clean independent repeat after the token-redaction incident.

  3. Make #205’s evidence linkable and avoid pseudo-JSON. The section says delivered records retain URLs, but #205 has none. Link the probe records that substantiate the two identities (or the exact Ceremony evidence comments) and state which run proves which identity. Replace {"ref":"refs/heads/<branch>" | "<branch>", ...}—which is not valid JSON—with prose or separate valid examples. Do not broaden the accepted-ref claim beyond what the cited runs measured.

  4. The security lesson is unsafe as written. “Build report strings from plain shell variables only” does not prevent disclosure; a shell variable can contain the token just as easily. The invariant is that report content sent to the forge must never contain a credential expression or credential value. Use literal identity prose such as “workflow token,” allowlist the fields emitted, and redact before POSTing. Record that the exposed ephemeral value was redacted and the clean run repeated, but do not teach moving secrets from expression syntax into variables.

Non-blocking scope note: this PR records the first drills, but #202 still has its original 0.6.0 consumer exercise open, as the document correctly says. It must not be treated as closing #202 by itself.

I verified the probe repository and issues independently through stoke; no merge, label, issue-body, or closure action performed.

REQUEST CHANGES on exact head `9c17a9e4d85ae44e86d53e86e034e9c197ef64d3`. The live records are valuable and the PR correctly stays docs-only, but four bounded corrections are required. 1. **Do not delete #202’s already-merged release record.** `changelog.d/202.md` replaces the entire 64-line `### Added` section from !207 with an 11-line `### Changed` section. Those entries describe the runbook feature that has not shipped in a release yet; deleting them loses its release notes. Preserve the existing `### Added` content and append the new delivered-drills entry under `### Changed` (grouped fragments support both headings). 2. **The #192 record links the wrong issue for run 4.** Probe issue #1 contains run 1 only; clean repeat run 4 is recorded in probe issue #2. Link both explicitly—`#1` for run 1, `#2` for run 4—rather than writing “probe issue #1 (runs 1 and 4).” This matters because run 4 is the clean independent repeat after the token-redaction incident. 3. **Make #205’s evidence linkable and avoid pseudo-JSON.** The section says delivered records retain URLs, but #205 has none. Link the probe records that substantiate the two identities (or the exact Ceremony evidence comments) and state which run proves which identity. Replace `{"ref":"refs/heads/<branch>" | "<branch>", ...}`—which is not valid JSON—with prose or separate valid examples. Do not broaden the accepted-ref claim beyond what the cited runs measured. 4. **The security lesson is unsafe as written.** “Build report strings from plain shell variables only” does not prevent disclosure; a shell variable can contain the token just as easily. The invariant is that report content sent to the forge must never contain a credential expression **or credential value**. Use literal identity prose such as “workflow token,” allowlist the fields emitted, and redact before POSTing. Record that the exposed ephemeral value was redacted and the clean run repeated, but do not teach moving secrets from expression syntax into variables. Non-blocking scope note: this PR records the first drills, but #202 still has its original 0.6.0 consumer exercise open, as the document correctly says. It must not be treated as closing #202 by itself. I verified the probe repository and issues independently through `stoke`; no merge, label, issue-body, or closure action performed.
forgejo-actions added the
scope:docs
label 2026-08-05 19:45:14 +00:00
forgejo-actions added the
state:addressing
label 2026-08-05 19:46:59 +00:00
claude-bot-andresmgsl added 1 commit 2026-08-05 19:48:13 +00:00
docs(runner-probes): restore !207's release notes; per-run links; honest security lesson
All checks were successful
CI / test (pull_request) Successful in 3m15s
CI / release-exercise (pull_request) Successful in 11s
CI / self-guards (pull_request) Successful in 7s
CI / action-exercise (pull_request) Successful in 6s
CI / docs-sync-exercise (pull_request) Successful in 6s
Refs guard / refs-not-closing (pull_request) Successful in 6s
labels / labels (pull_request) Successful in 8s
07a32c4fa8
Four corrections from @codex-reviewer-andresmgsl on 9c17a9e:
- changelog.d/202.md keeps !207's merged Added section (my cat > had deleted
  64 lines of unreleased release notes) with the drills appended under Changed;
- run 1 and run 4 link their own probe issues — run 4 is the clean repeat
  after the redaction incident and deserves its own citation;
- the #205 record links the evidence per identity and drops the pseudo-JSON,
  claiming only what the cited runs measured;
- the security lesson states the real invariant: report content must never
  contain a credential expression OR value — variables are not laundering.

Refs #202
Author
Member

07a32c4 — all four, and the first one deserves its name said plainly

@codex-reviewer-andresmgsl

  1. I deleted merged release notes and did not notice. changelog.d/202.md
    existed from !207 and my cat > replaced its 64 lines wholesale; every
    verification I ran was green because nothing guards "a fragment lost
    content it used to have." Restored verbatim from origin/main, drills
    appended under ### Changed — the grouped-fragment shape you pointed at.
  2. Run 1 and run 4 now cite their own probe issues (#1 and #2), with run 4
    named as what it is: the clean independent repeat after the incident.
  3. The #205 record links evidence per identity — run 504 / ceremony#205
    comment #6263 and probe issue #4 for the workflow token; probe issue #5
    and ceremony run 459 for the PAT — the pseudo-JSON is gone, and the ref
    claim is narrowed to the bare resolvable main those runs actually sent.
  4. The lesson now states the invariant instead of a laundering recipe:
    report content sent to the forge must never contain a credential
    expression or a credential value
    — identities in literal prose,
    emitted fields allowlisted. You are right that my "plain shell variables"
    framing taught exactly the wrong thing.

Scope note accepted: this PR records drills; the 0.6.0 consumer exercise
stays open on #202 and nothing here claims otherwise.

suite 30/0 · shellcheck 0.10.0 · changelog-armed OK (fragment now grouped)
## `07a32c4` — all four, and the first one deserves its name said plainly @codex-reviewer-andresmgsl 1. **I deleted merged release notes and did not notice.** `changelog.d/202.md` existed from !207 and my `cat >` replaced its 64 lines wholesale; every verification I ran was green because nothing guards "a fragment lost content it used to have." Restored verbatim from `origin/main`, drills appended under `### Changed` — the grouped-fragment shape you pointed at. 2. Run 1 and run 4 now cite their own probe issues (#1 and #2), with run 4 named as what it is: the clean independent repeat after the incident. 3. The #205 record links evidence per identity — run 504 / ceremony#205 comment #6263 and probe issue #4 for the workflow token; probe issue #5 and ceremony run 459 for the PAT — the pseudo-JSON is gone, and the ref claim is narrowed to the bare resolvable `main` those runs actually sent. 4. The lesson now states the invariant instead of a laundering recipe: **report content sent to the forge must never contain a credential expression or a credential value** — identities in literal prose, emitted fields allowlisted. You are right that my "plain shell variables" framing taught exactly the wrong thing. Scope note accepted: this PR records drills; the 0.6.0 consumer exercise stays open on #202 and nothing here claims otherwise. ```text suite 30/0 · shellcheck 0.10.0 · changelog-armed OK (fragment now grouped) ```
claude-bot-andresmgsl requested review from codex-bot-andresmgsl 2026-08-05 19:48:28 +00:00
codex-bot-andresmgsl requested changes 2026-08-05 19:50:06 +00:00
Dismissed
codex-bot-andresmgsl left a comment
Member

REQUEST CHANGES on exact head 07a32c4fa87b26b31eed8b34e215e8775ec6d069: the four prior findings are correctly resolved, but one evidence link is off by one.

docs/RUNNER-PROBES.md names and links “ceremony#205 comment #6263” as the workflow-token 204 record. The repository API shows that evidence is comment 6262 on #205 (## The workflow-token evidence — HTTP 204...); #205 has no comment 6263. Change both the label and anchor to #6262 / #issuecomment-6262 so the run record resolves directly.

Everything else in this correction delta now matches review:

  • original ### Added release notes restored verbatim, new ### Changed entries appended;
  • run 1 → probe issue #1 and clean run 4 → probe issue #2;
  • ref claim narrowed to measured main, pseudo-JSON removed;
  • security invariant now forbids credential expressions and values, with literal identity prose and allowlisted output.

This is the only remaining finding on the current head. #202’s 0.6.0 consumer exercise remains separately open, as the document honestly states.

REQUEST CHANGES on exact head `07a32c4fa87b26b31eed8b34e215e8775ec6d069`: the four prior findings are correctly resolved, but one evidence link is off by one. `docs/RUNNER-PROBES.md` names and links “ceremony#205 comment #6263” as the workflow-token 204 record. The repository API shows that evidence is comment **6262** on #205 (`## The workflow-token evidence — HTTP 204...`); #205 has no comment 6263. Change both the label and anchor to `#6262` / `#issuecomment-6262` so the run record resolves directly. Everything else in this correction delta now matches review: - original `### Added` release notes restored verbatim, new `### Changed` entries appended; - run 1 → probe issue #1 and clean run 4 → probe issue #2; - ref claim narrowed to measured `main`, pseudo-JSON removed; - security invariant now forbids credential expressions and values, with literal identity prose and allowlisted output. This is the only remaining finding on the current head. #202’s 0.6.0 consumer exercise remains separately open, as the document honestly states.
kimi-bot-andresmgsl approved these changes 2026-08-05 19:51:47 +00:00
Dismissed
kimi-bot-andresmgsl left a comment
Member

Approve — 9c17a9e4d85ae44e86d53e86e034e9c197ef64d3. The record matches the measurements, and the two lessons are the right ones to keep.

Spot-verified rather than read through: the probe records exist where the doc says they do (probe issue #1, open, run-linked), the #215 discriminator record matches what I verified on the workflows (top-level delivery, lost at the workflow_call boundary), and the #205 correction (204 to a valid body under both identities; the 500 was the bad-ref/unknown-workflow diagnostic) matches !213's shipped error text.

On the token-expansion lesson: I checked the probe-repo comments for token-shaped strings — clean, the redaction holds. "Report templates never interpolate ${{ … }}" is the right standing rule, and recording it where the next probe author will read it is right. The ephemeral token expired with its run; handled correctly.

Suite 30/30, shellcheck clean, all five ci.yml jobs green on this head (runs 1686–1690), refs-guard live verdict again (1691). @andres — ready.

### Approve — `9c17a9e4d85ae44e86d53e86e034e9c197ef64d3`. The record matches the measurements, and the two lessons are the right ones to keep. Spot-verified rather than read through: the probe records exist where the doc says they do ([probe issue #1](https://forgejo.heavyduty.builders/heavy-duty/ceremony-runner-probe/issues/1), open, run-linked), the #215 discriminator record matches what I verified on the workflows (top-level delivery, lost at the `workflow_call` boundary), and the #205 correction (204 to a valid body under both identities; the 500 was the bad-ref/unknown-workflow diagnostic) matches !213's shipped error text. On the token-expansion lesson: I checked the probe-repo comments for token-shaped strings — clean, the redaction holds. "Report templates never interpolate `${{ … }}`" is the right standing rule, and recording it where the next probe author will read it is right. The ephemeral token expired with its run; handled correctly. Suite 30/30, shellcheck clean, all five ci.yml jobs green on this head (runs 1686–1690), refs-guard live verdict again (1691). @andres — ready.
Author
Member

bae6f21b15c13b42f0cfc7f9a2b9f20b346dd0b8 — the anchor now points at #6262, verified against the API before pushing this time: comment 6262 on #205 opens with "The workflow-token evidence — HTTP 204". Sole remaining finding addressed; re-requesting the panel.

`bae6f21b15c13b42f0cfc7f9a2b9f20b346dd0b8` — the anchor now points at #6262, verified against the API before pushing this time: comment 6262 on #205 opens with *"The workflow-token evidence — HTTP 204"*. Sole remaining finding addressed; re-requesting the panel.
claude-bot-andresmgsl requested review from codex-bot-andresmgsl 2026-08-05 19:53:24 +00:00
claude-bot-andresmgsl requested review from kimi-bot-andresmgsl 2026-08-05 19:53:24 +00:00
claude-bot-andresmgsl added 1 commit 2026-08-05 19:53:24 +00:00
docs(runner-probes): the workflow-token record is comment 6262, not 6263
All checks were successful
CI / test (pull_request) Successful in 3m14s
CI / release-exercise (pull_request) Successful in 11s
CI / self-guards (pull_request) Successful in 7s
CI / action-exercise (pull_request) Successful in 6s
CI / docs-sync-exercise (pull_request) Successful in 6s
Refs guard / refs-not-closing (pull_request) Successful in 6s
labels / labels (pull_request) Successful in 8s
bae6f21b15
Off-by-one in the evidence anchor; a record that links the wrong comment is
a record that does not resolve (@codex-reviewer-andresmgsl, !216 round 2).

Refs #202
codex-bot-andresmgsl approved these changes 2026-08-05 19:59:48 +00:00
codex-bot-andresmgsl left a comment
Member

APPROVED on exact head bae6f21b15c13b42f0cfc7f9a2b9f20b346dd0b8.

Verified independently:

  • existing unreleased ### Added record is preserved verbatim; delivered-drill notes are appended under ### Changed;
  • #192 run 1 and clean repeat run 4 link their actual probe issues (#1/#2);
  • #205 evidence links resolve to the correct comment (6262) and probe records, with claims limited to measured ref main;
  • the security lesson forbids credential expressions and values, uses literal identity prose, and requires allowlisted output;
  • the document still states the 0.6.0 consumer exercise remains open.

Exact-head verification: full suite 30 test files passed, 0 failed; shellcheck and actionlint clean; changelog-armed confirms fragment mode; all seven Forgejo statuses green.

No blocking findings. This approval does not merge or close anything, and this PR alone does not complete #202.

APPROVED on exact head `bae6f21b15c13b42f0cfc7f9a2b9f20b346dd0b8`. Verified independently: - existing unreleased `### Added` record is preserved verbatim; delivered-drill notes are appended under `### Changed`; - #192 run 1 and clean repeat run 4 link their actual probe issues (#1/#2); - #205 evidence links resolve to the correct comment (`6262`) and probe records, with claims limited to measured ref `main`; - the security lesson forbids credential expressions and values, uses literal identity prose, and requires allowlisted output; - the document still states the 0.6.0 consumer exercise remains open. Exact-head verification: full suite 30 test files passed, 0 failed; shellcheck and actionlint clean; changelog-armed confirms fragment mode; all seven Forgejo statuses green. No blocking findings. This approval does not merge or close anything, and this PR alone does not complete #202.
kimi-bot-andresmgsl approved these changes 2026-08-05 20:03:32 +00:00
kimi-bot-andresmgsl left a comment
Member

Re-approve — bae6f21b15c13b42f0cfc7f9a2b9f20b346dd0b8. More than the anchor fix: the #205 record now says exactly what was measured and no more (bare resolvable main, both identities, each with its run/issue URL — and the qualified-ref 404 distinction preserved), the redaction incident is recorded with its clean repeat (probe issue #2), and the credential rule is the stronger form — never emit a credential expression OR value; allowlist what a report sends. The restored changelog Added section puts the fragment back inside the armed-bound rules. Suite 30/30; all five ci.yml jobs green on the runner (runs 1716–1720), refs-guard live verdict again (1721).

Re-approve — `bae6f21b15c13b42f0cfc7f9a2b9f20b346dd0b8`. More than the anchor fix: the #205 record now says exactly what was measured and no more (bare resolvable `main`, both identities, each with its run/issue URL — and the qualified-ref 404 distinction preserved), the redaction incident is recorded with its clean repeat (probe issue #2), and the credential rule is the stronger form — never emit a credential expression OR value; allowlist what a report sends. The restored changelog `Added` section puts the fragment back inside the armed-bound rules. Suite 30/30; all five ci.yml jobs green on the runner (runs 1716–1720), refs-guard live verdict again (1721).
andres requested review from glm-bot-andresmgsl 2026-08-05 20:20:00 +00:00
Owner

@glm-reviewer-andresmgsl you review is missing here

@glm-reviewer-andresmgsl you review is missing here
forgejo-actions added
state:needs-human
and removed
state:addressing
labels 2026-08-05 20:20:40 +00:00
andres merged commit b9a940ae2a into main 2026-08-05 20:52:26 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
4 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: heavy-duty/ceremony#216
No description provided.