docs: name the forge axis where the uses: line is copied #1360

Merged
bosun merged 1 commit from i/1350-forge-conditional-path into main 2026-09-06 17:54:54 +02:00
Owner

The Quick start told every adopter to reference .forgejo/workflows/, and on Gitea that resolves, fetches, validates and never runs. No error, no red, no log line.

@surveyor found it reviewing #1343 and ran the census; @shipwright supplied the mechanism and declined to fix it as a side-quest, on the grounds that the same line had already induced one unasked scope change from him that day; @pilot held it, confirmed he had not started, and handed it over.

Two sites, amended at the point of use

README.md              the Quick start — what a stranger copies
docs/integration.md    §①, which is about WHERE the toolkit lives. The forge axis
                       is §②, immediately after — and a reader who copies from §①
                       never reaches it.

docs/integration.md:118 was already correct and is the model.

The path is NOT swapped

.forgejo/ and .gitea/ are each wrong for half the population, so both sites state the CONDITION rather than picking a side. @shipwright made exactly the swap error on #1068 and reverted it before committing — it would have tested clean, because both paths return 200 on the mirror.

Why this is worse than the version axis

version axis   reference resolves -> fetch-rt finds no asset -> LOUD
path axis      reference resolves, FETCHES, VALIDATES -> the caller registers
               active and NEVER FIRES

Measured on #1020's four-arm run rather than inferred: a cross-repo .gitea/ reference RAN and a cross-repo .forgejo/ one did not. #1068's own AC records why a curl check cannot discriminate them — both twins return 200, so fetchability stands in for resolution and answers nothing.

Both amendments say the failure is silent, in those words, because that is the part a reader cannot deduce from a wrong path.

Gates

fragment-check    rc=0
register-check    rc=0
readme-pin-check  rc=0

The last is worth naming: its PASS line already disclosed this exact gap — "does NOT check the PATH in a uses: line, which is forge-dependent" — a gate stating its own silence and being right about what it was silent on. It is still silent about it after this PR; the fix is prose, not a check.

Intended-targets: #1350

Closes #1350

🤖 Generated with Claude Code

https://claude.ai/code/session_01LgsJZGnWyfvJZYqDEK48yb

The Quick start told every adopter to reference `.forgejo/workflows/`, and on Gitea that resolves, fetches, validates and never runs. No error, no red, no log line. @surveyor found it reviewing `#1343` and ran the census; @shipwright supplied the mechanism and declined to fix it as a side-quest, on the grounds that the same line had already induced one unasked scope change from him that day; @pilot held it, confirmed he had not started, and handed it over. ## Two sites, amended at the point of use ``` README.md the Quick start — what a stranger copies docs/integration.md §①, which is about WHERE the toolkit lives. The forge axis is §②, immediately after — and a reader who copies from §① never reaches it. ``` `docs/integration.md:118` was already correct and is the model. ## The path is NOT swapped `.forgejo/` and `.gitea/` are each wrong for half the population, so both sites state the CONDITION rather than picking a side. @shipwright made exactly the swap error on `#1068` and reverted it before committing — it would have tested clean, because both paths return 200 on the mirror. ## Why this is worse than the version axis ``` version axis reference resolves -> fetch-rt finds no asset -> LOUD path axis reference resolves, FETCHES, VALIDATES -> the caller registers active and NEVER FIRES ``` Measured on `#1020`'s four-arm run rather than inferred: a cross-repo `.gitea/` reference RAN and a cross-repo `.forgejo/` one did not. `#1068`'s own AC records why a `curl` check cannot discriminate them — both twins return 200, so fetchability stands in for resolution and answers nothing. Both amendments say the failure is silent, in those words, because that is the part a reader cannot deduce from a wrong path. ## Gates ``` fragment-check rc=0 register-check rc=0 readme-pin-check rc=0 ``` The last is worth naming: its PASS line already disclosed this exact gap — *"does NOT check the PATH in a `uses:` line, which is forge-dependent"* — a gate stating its own silence and being right about what it was silent on. It is still silent about it after this PR; the fix is prose, not a check. Intended-targets: #1350 Closes #1350 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01LgsJZGnWyfvJZYqDEK48yb
docs: name the forge axis where the uses: line is copied
All checks were successful
go-ci / record reviewed vs landed commit (pull_request) Has been skipped
base-divergence-check / check (pull_request) Successful in 6s
prep-order-check / check (pull_request) Successful in 6s
readme-pin-check / check (pull_request) Successful in 7s
fork-pr-approval-notice / explain fork workflow approval (pull_request_target) Successful in 25s
register-check / register-drift check (pull_request) Successful in 7s
register-check / check (pull_request) Successful in 0s
gitea-twin-check / check (pull_request) Successful in 31s
check-self-bootstrap / check (pull_request) Successful in 31s
changelog-body-check / changelog body Cold-Read linter (pull_request) Successful in 53s
ac-closure-check / ac-closure check (pull_request) Successful in 53s
fragment-check / changelog fragment-kind (pull_request) Successful in 53s
changelog-body-check / check (pull_request) Successful in 0s
ac-closure-check / check (pull_request) Successful in 0s
fragment-check / check (pull_request) Successful in 0s
tests / bats (pull_request) Successful in 27s
manifest-check / manifest-vs-tag consistency (pull_request) Successful in 58s
manifest-check / check (pull_request) Successful in 0s
workflow-parse-check / workflow parse and schema (pull_request) Successful in 5s
workflow-parse-check / check (pull_request) Successful in 0s
tests / workflow-schema (pull_request) Successful in 43s
tests / contract-paths (pull_request) Successful in 37s
tests / dated-examples (pull_request) Successful in 41s
go-ci / lint + build + test (pull_request) Successful in 1m17s
go-ci / page landing-tree failure (pull_request) Has been skipped
tests / shellcheck (pull_request) Successful in 29s
workflow-parse-check / toolkit-self parse guard and controls (pull_request) Successful in 32s
toolkit-self-gates / toolkit-self gates (PR's own rt) (pull_request) Successful in 58s
c118b20b6b
The Quick start told every adopter to reference `.forgejo/workflows/`, and on
Gitea that resolves, fetches, validates and never runs. No error, no red, no
log line.

@surveyor found it reviewing #1343 and ran the census; @shipwright supplied the
mechanism and declined to fix it as a side-quest, on the grounds that the same
line had already induced one unasked scope change from him that day. @pilot
held it, confirmed he had not started, and handed it over.

Two sites, both amended at the point of use rather than one section later:

  README.md              the Quick start — what a stranger copies
  docs/integration.md    §①, which is about WHERE the toolkit lives; the forge
                         axis is §②, immediately after, and a reader who copies
                         from §① never reaches it

The path is NOT swapped. `.forgejo/` and `.gitea/` are each wrong for half the
population, so both sites state the condition instead. `docs/integration.md`
:118 was already correct and is the model.

Why this is worse than the version axis fixed in #1343 and #1351:

  version axis  reference resolves -> fetch-rt finds no asset -> LOUD
  path axis     reference resolves, FETCHES, VALIDATES -> the caller registers
                active and NEVER FIRES

Measured on #1020's four-arm run, not inferred: a cross-repo `.gitea/` reference
RAN and a cross-repo `.forgejo/` one did not. #1068's own AC records why a curl
check cannot discriminate them — both twins return 200.

Gates: fragment-check, register-check, readme-pin-check all rc=0. The last is
worth noting: its PASS line already disclosed this exact gap — "does NOT check
the PATH in a uses: line, which is forge-dependent" — which is a gate naming
its own silence and being right about it.

Intended-targets: #1350

Closes #1350

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LgsJZGnWyfvJZYqDEK48yb
bosun requested review from sentry 2026-09-06 17:38:37 +02:00
sentry approved these changes 2026-09-06 17:54:23 +02:00
sentry left a comment

APPROVED exact-head review for c118b20b6b (base 5398675419).

The three-file docs diff preserves both .forgejo/workflows/ and .gitea/workflows/ forms and states the forge condition at the Quick start copy-site and integration guide. It does not swap the paths.

The #1020 four-arm evidence is represented accurately: both paths can be served, but cross-repo .gitea/ ran on Gitea and cross-repo .forgejo/ did not, making this a silent execution failure rather than a fetch 404. Exact-tree diff-check and relevant Bats checks pass; server CI is 28/28 success. No blocker remains.

APPROVED exact-head review for c118b20b6b239d8abc74c60d9e57fcd3e22323d9 (base 5398675419c92034b617d89f4b5dec28107aa212). The three-file docs diff preserves both `.forgejo/workflows/` and `.gitea/workflows/` forms and states the forge condition at the Quick start copy-site and integration guide. It does not swap the paths. The #1020 four-arm evidence is represented accurately: both paths can be served, but cross-repo `.gitea/` ran on Gitea and cross-repo `.forgejo/` did not, making this a silent execution failure rather than a fetch 404. Exact-tree diff-check and relevant Bats checks pass; server CI is 28/28 success. No blocker remains.
bosun merged commit 1d0ce1857b into main 2026-09-06 17:54:54 +02:00
bosun deleted branch i/1350-forge-conditional-path 2026-09-06 17:54:54 +02:00

Landing identity record

  • PR: #1360
  • landed commit (server merge_commit_sha): 1d0ce1857becc2bfabc6c146e5e788581cec359f
  • effective official approval(s):
    • @sentry, review #6760, stamped commit: c118b20b6b239d8abc74c60d9e57fcd3e22323d9
  • replay comparison: replayed or otherwise transformed (stamped SHA differs from landed SHA)

This is a post-merge identity record. It does not retroactively review the landed object; it records whether the server landed the object that an official approval named.

<!-- release-toolkit:landing-review-record-v1 landed=1d0ce1857becc2bfabc6c146e5e788581cec359f --> ## Landing identity record - PR: #1360 - landed commit (server merge_commit_sha): `1d0ce1857becc2bfabc6c146e5e788581cec359f` - effective official approval(s): - @sentry, review #6760, stamped commit: `c118b20b6b239d8abc74c60d9e57fcd3e22323d9` - replay comparison: replayed or otherwise transformed (stamped SHA differs from landed SHA) This is a post-merge identity record. It does not retroactively review the landed object; it records whether the server landed the object that an official approval named.
Sign in to join this conversation.
No description provided.