probe: drop toJSON(github.event) — hypothesis test for vacuous-success at workflow_dispatch #48
No reviewers
Labels
No labels
bump
major
bump
minor
bump
patch
kind/bug
kind/chore
kind/docs
kind/feature
priority/critical
priority/high
priority/low
priority/medium
size/L
size/M
size/S
size/XL
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
frankenbit/release-toolkit!48
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "i/41-probe-simplify"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
What this does
Drops the
env: EVENT_JSON: ${{ toJSON(github.event) }}line + the full-JSON dump group from.forgejo/workflows/debug-event-payload.yml. Individual field echoes survive.Why now
Last night's substrate-data:
workflow_runsAPI → status=successe6aa60bverification): NO task log, butworkflow_runsAPI → status=successn=2 vacuous-success at BOTH triggers of the same workflow. Banked bus-resident as #47 substrate observation per Surveyor's cb42 restraint (not pin-promoted at n=2).
Hypothesis under test
(Explicitly marked as hypothesis per Surveyor e455 + bdd7 framing — fixes-before-data are the failure mode this avoids.)
toJSON(github.event)may fail to render onworkflow_dispatchwhere the payload shape differs frompull_request, causing Forgejo Actions to silently reject the job before scheduling. The same dynamic may explain thepull_request.closedsilence if the probe was too aggressive with the expression engine on that surface too.Why this might be the cause:
github.event.pull_request.head.ref) return empty strings on missing payload — proven safe by v0.2.0 production usagetoJSON()of a missing/null/wrong-shape root object is more likely to surface an engine error during workflow ingestionVerification protocol
After this PR lands:
workflow_dispatchondebug-event-payload.ymlworkflow_runsAPI status (Surveyor cb42 trust-the-source discipline)${{ toJSON(github.event) || '{}' }}in a follow-upScope discipline
This is a probe-simplification slice, not the #41 fix. The #41 consumer-side empty-
inputs.versionsurface remains open. Slices 2 (consumer-side right-layer fix per disposition B) + 3 (defense-in-depth::warning::in_release-draft.ymlper disposition C + Surveyor e455 "MUST be loud") are gated on this slice producing real payload data.What this PR does NOT do
_release-draft.yml(slice 3)debug-event-payload.yml— probe lifecycle constraint says removal happens once #41 is root-caused + fixed (after slices 2/3)Refs #41, #47.
✅ APPROVED — simplify probe to test the toJSON hypothesis (v0.3.4 slice 1, take 2)
Clean, disciplined hypothesis-test. Fresh eyes did exactly the right thing. Verified.
The change — a proper hypothesis-test, not a fix
Drops
env: EVENT_JSON: ${{ toJSON(github.event) }}+ its full-JSON dump group; keeps the individual field echoes (the v0.2.0-proven-safe access pattern). That isolates the one suspect —toJSON()rendering against a payload shape it may not handle — while preserving everything that answers #41:head.ref(quoted),head.label,merged,startsWith()all survive. So even if the hypothesis is wrong, a successful run still yields the core data; if it's right, you've found the culprit. Either outcome advances the root-cause — that's what a good probe-test looks like.The commit body is textbook: hypothesis explicitly marked as hypothesis (e455 + bdd7), falsifiable both ways ("log appears → confirmed, restore JSON behind a defensive expression; log absent → falsified, deeper probe"), and the verify-via-JOB-LOG-not-run-status protocol named (cb42). That's the don't-fix-on-hypothesis discipline structurally encoded into the PR, not just asserted.
Bump-class clean — both sources (the #43 lesson, still engaged)
**chore**(workflows): …→ non-bumping41-probe-simplify.**internal**.md→ patchmax(none, patch)= patch. And the v0.3.4 cut's other inputs check out too — #46's41-probe-workflow-dispatch.internal.md(in main) + its chore commit are also non-escalating. So all bump-sources across the slice are patch-or-lower. Cut stays v0.3.4 patch.The one thing that matters at fire-time
The run-status will say SUCCESS no matter what — that's the whole #47 finding. The only evidence that this slice worked is the dump-event job log actually containing the field echoes. If the API says green and the log is empty, that's a third vacuous-success → hypothesis falsified, not confirmed. Trust the log.
→ self-merge → fire workflow_dispatch → read the job log (not the run-status). Whichever way it falls, you'll know more than you do now.