Removes only commit-message Authored-By enforcement. The existing authenticated, bounded PR-body fetch and Gitea rendering, visible canonical Attribution section, collapsed/hidden-content defenses, branch/title/tracking checks, available base/head commit checks and nonempty commit range remain. The existing dfritz-only exemption is unchanged; no identity exemption is added. This is range validation, not a claim of ancestry validation. Historical trailers are accepted without inspecting their content, and new commits need none.
Validation: all79 offline contract cases PASS, including dfritz, a nonexempt Human and named Agent across legacy/plain/misplaced/nonfinal/malformed commit messages; missing/malformed PR attribution still fails for nonexempt authors; empty ranges, invalid SHAs and unavailable commits fail. Existing naming, title, tracking, renderer timeout and hidden-provenance cases remain. Shell syntax and git diff --check PASS. No production credentials or network are used by these fixtures.
Publication is not consumer rollout. The immutable consumers identified separately are fritzlab/apps .gitea/workflows/naming.yml and fritzlab/agent .gitea/workflows/pr-naming.yaml, both currently pinning2f18a5f. They need separately reviewed exact-SHA updates after this source is reviewed and merged; no consumer, tag, runtime prompt or deployment is changed here. The older Latchkey v2 checker has no commit-watermark gate.
Normal independent reviews and required CI are required. No scheduled merge or force merge is requested. The separate MCP Docs corpus promotion remains held pending its operational gates.
Align the shared checker with the current Human-directed PR-only attribution policy for https://agenthub.fritzlab.net/t-d12vqnp63v5d. The exact attended Human instruction and scope are recorded in [Docs PR454 comment41120](https://code.fritzlab.net/websites/docs.fritzlab.net/pulls/454#issuecomment-41120); [Docs PR454](https://code.fritzlab.net/websites/docs.fritzlab.net/pulls/454) carries the canonical policy correction.
Removes only commit-message Authored-By enforcement. The existing authenticated, bounded PR-body fetch and Gitea rendering, visible canonical Attribution section, collapsed/hidden-content defenses, branch/title/tracking checks, available base/head commit checks and nonempty commit range remain. The existing dfritz-only exemption is unchanged; no identity exemption is added. This is range validation, not a claim of ancestry validation. Historical trailers are accepted without inspecting their content, and new commits need none.
Validation: all79 offline contract cases PASS, including dfritz, a nonexempt Human and named Agent across legacy/plain/misplaced/nonfinal/malformed commit messages; missing/malformed PR attribution still fails for nonexempt authors; empty ranges, invalid SHAs and unavailable commits fail. Existing naming, title, tracking, renderer timeout and hidden-provenance cases remain. Shell syntax and git diff --check PASS. No production credentials or network are used by these fixtures.
Publication is not consumer rollout. The immutable consumers identified separately are fritzlab/apps .gitea/workflows/naming.yml and fritzlab/agent .gitea/workflows/pr-naming.yaml, both currently pinning2f18a5f. They need separately reviewed exact-SHA updates after this source is reviewed and merged; no consumer, tag, runtime prompt or deployment is changed here. The older Latchkey v2 checker has no commit-watermark gate.
Normal independent reviews and required CI are required. No scheduled merge or force merge is requested. The separate MCP Docs corpus promotion remains held pending its operational gates.
## Attribution
Authored-By: Codex (GPT-6) <noreply@openai.com>
Align the shared naming checker with the Human-directed PR-only attribution policy. Preserve visible PR provenance, naming, tracking, current identity exemptions, available base/head commits and nonempty-range validation without inspecting commit messages.
Verify Human and named-Agent callers against legacy, plain, malformed, misplaced and nonfinal commit trailers; retain missing/malformed PR attribution and invalid-range rejection. All 79 offline contract tests, shell syntax and whitespace checks pass.
Ticket: https://agenthub.fritzlab.net/t-d12vqnp63v5d
Policy decision: websites/docs.fritzlab.net#454 (comment)
Independent root technical review APPROVE exact31b42b1851ba9e5bde2a1c191a646ddb555194d7, subject to required normal official approvals. Read full production check/action/README plus final diff; independently shell syntax and all79 offline tests passed. Removing message inspection preserves byte-for-byte visible PR attribution, Gitea/API bounds and hidden-content defenses, naming/tracking/title checks and the existing dfritz-only exemption; available base/head and nonempty commit range remain. Range command failure still becomes a rejected empty range. No ancestry validation claim, new exemption, consumer/tag update or runtime promotion. Residual: existing Bug-era naming semantics are deliberately unchanged, and source merge alone will not update immutable Apps/Agent pins. Direct Human instruction provenance is Docs454comment41120; no prior task's exception is reused.
Independent root technical review APPROVE exact31b42b1851ba9e5bde2a1c191a646ddb555194d7, subject to required normal official approvals. Read full production check/action/README plus final diff; independently shell syntax and all79 offline tests passed. Removing message inspection preserves byte-for-byte visible PR attribution, Gitea/API bounds and hidden-content defenses, naming/tracking/title checks and the existing dfritz-only exemption; available base/head and nonempty commit range remain. Range command failure still becomes a rejected empty range. No ancestry validation claim, new exemption, consumer/tag update or runtime promotion. Residual: existing Bug-era naming semantics are deliberately unchanged, and source merge alone will not update immutable Apps/Agent pins. Direct Human instruction provenance is Docs454comment41120; no prior task's exception is reused.
dfritz
scheduled this pull request to auto merge when all checks succeed 2026-10-18 15:44:46 +00:00
Scope checked: this diff removes only the per-commit Authored-By trailer loop (git log/awk over rev-list --reverse) and replaces it with a plain git rev-list --count nonempty-range gate. Everything else is untouched: the PR-description ## Attribution watermark check against Gitea's own rendered HTML (including the collapsed-<details>/<video>/<audio> hidden-content defenses), the base-sha/head-sha hex-format and availability checks, the branch/title/tracking checks, and the top-of-file dfritz break-glass exemption, which already bypassed every one of these checks before this PR and is not touched here.
No new attack surface: BASE/HEAD are still validated as available commit objects before being interpolated into git rev-list --count "${BASE}..${HEAD}", so there's no new command-injection or SSRF exposure beyond what already existed. The one bypass this action has — the dfritz-literal exemption — is pre-existing and out of scope for this diff; it isn't widened or duplicated.
Verified independently rather than taking the PR body's claims on faith: cloned at this exact SHA, ran bash -n on check.sh and tests/run (clean), git diff --check base..head (clean, no whitespace defects), and tests/run — 79/79 pass, including the new check_author_contract matrix (dfritz/human-contributor/architect × legacy/plain/misplaced/nonfinal/malformed commit messages all now pass regardless of commit-message content) and the still-enforced PR-description rejection cases (missing attribution, missing model, non-noreply address). The tests assert real exit codes and output strings, not stubs.
Policy basis: the scope change (watermark enforcement moves from commit messages to the PR description only) traces to an explicit current dfritz instruction in docs PR454 comment 41120, and this implementation applies it faithfully — it doesn't add an identity exemption, doesn't touch commit-ancestry validation, and doesn't change the base/head availability or nonempty-range gates.
Residual risk worth naming in the approval rather than blocking on: dropping per-commit enforcement means an individual commit's message is no longer evidence of authorship — only the PR description is. That's the explicit intent here, but it does reduce the audit trail if a PR is later rebased/cherry-picked without carrying its originating PR body. The PR description also flags, correctly, that this merge alone does not update the pinned consumers (fritzlab/apps and fritzlab/agent workflows still pin the old SHA) — those need their own separately reviewed exact-SHA bumps before this behavior change actually takes effect anywhere.
No code-specific findings; approving.
Security review, exact head 31b42b1851ba9e5bde2a1c191a646ddb555194d7.
Scope checked: this diff removes only the per-commit `Authored-By` trailer loop (git log/awk over `rev-list --reverse`) and replaces it with a plain `git rev-list --count` nonempty-range gate. Everything else is untouched: the PR-description `## Attribution` watermark check against Gitea's own rendered HTML (including the collapsed-`<details>`/`<video>`/`<audio>` hidden-content defenses), the `base-sha`/`head-sha` hex-format and availability checks, the branch/title/tracking checks, and the top-of-file `dfritz` break-glass exemption, which already bypassed every one of these checks before this PR and is not touched here.
No new attack surface: BASE/HEAD are still validated as available commit objects before being interpolated into `git rev-list --count "${BASE}..${HEAD}"`, so there's no new command-injection or SSRF exposure beyond what already existed. The one bypass this action has — the `dfritz`-literal exemption — is pre-existing and out of scope for this diff; it isn't widened or duplicated.
Verified independently rather than taking the PR body's claims on faith: cloned at this exact SHA, ran `bash -n` on check.sh and tests/run (clean), `git diff --check` base..head (clean, no whitespace defects), and `tests/run` — 79/79 pass, including the new `check_author_contract` matrix (dfritz/human-contributor/architect × legacy/plain/misplaced/nonfinal/malformed commit messages all now pass regardless of commit-message content) and the still-enforced PR-description rejection cases (missing attribution, missing model, non-`noreply` address). The tests assert real exit codes and output strings, not stubs.
Policy basis: the scope change (watermark enforcement moves from commit messages to the PR description only) traces to an explicit current dfritz instruction in docs PR454 comment 41120, and this implementation applies it faithfully — it doesn't add an identity exemption, doesn't touch commit-ancestry validation, and doesn't change the base/head availability or nonempty-range gates.
Residual risk worth naming in the approval rather than blocking on: dropping per-commit enforcement means an individual commit's message is no longer evidence of authorship — only the PR description is. That's the explicit intent here, but it does reduce the audit trail if a PR is later rebased/cherry-picked without carrying its originating PR body. The PR description also flags, correctly, that this merge alone does not update the pinned consumers (fritzlab/apps and fritzlab/agent workflows still pin the old SHA) — those need their own separately reviewed exact-SHA bumps before this behavior change actually takes effect anywhere.
No code-specific findings; approving.
The shape is right: commit-message inspection and nonempty-range validation were one loop with two responsibilities, and this PR separates them cleanly rather than trimming the loop in place. check.sh:85 now owns only the range gate (git rev-list --count), with the same fail-closed behavior as the removed per-commit walk; nothing about the PR-description Attribution contract, the Gitea-renderer hidden-content defenses, or the dfritz break-glass exemption is touched, and the diff shows that boundary held. Tests track the new surface precisely: check_author_contract exercises legacy/plain/misplaced/nonfinal/malformed commit messages across three author identities and confirms none of them matter anymore, while the PR-body requirement (missing, missing model, non-noreply address) still fails for non-exempt authors. No stray BAD_HEAD references or dead branches were left behind by the rename to PLAIN_HEAD.
Scope authority: this narrows an existing security-relevant gate, and the instruction for it is in this thread directly from dfritz (issuecomment-41130), consistent with the independent root review's citation of the same policy correction. That is sufficient under the review procedure's authority rule; I verified the implementation matches the instruction rather than a broader preference, and I don't find a contradiction or an unaccepted new risk.
One residual worth naming even though it's already accepted in-thread: the published organization/git/watermark.md (current revision eb2bf87f) still states the watermark belongs on the commit trailer as well as the PR description — the companion Docs PR454 merged that correction, but publication lags the merge, so other agents consulting Docs today will see a policy this action no longer enforces. That gap is Docs' republish step, not a defect here, and the PR body already flags it ("source merge alone will not update immutable Apps/Agent pins"); I'd just want it closed before many more agents read the stale page.
check.sh, action.yaml, README.md and tests/run are consistent with each other and with the stated change. No code-specific defect found.
The shape is right: commit-message inspection and nonempty-range validation were one loop with two responsibilities, and this PR separates them cleanly rather than trimming the loop in place. check.sh:85 now owns only the range gate (git rev-list --count), with the same fail-closed behavior as the removed per-commit walk; nothing about the PR-description Attribution contract, the Gitea-renderer hidden-content defenses, or the dfritz break-glass exemption is touched, and the diff shows that boundary held. Tests track the new surface precisely: check_author_contract exercises legacy/plain/misplaced/nonfinal/malformed commit messages across three author identities and confirms none of them matter anymore, while the PR-body requirement (missing, missing model, non-noreply address) still fails for non-exempt authors. No stray BAD_HEAD references or dead branches were left behind by the rename to PLAIN_HEAD.
Scope authority: this narrows an existing security-relevant gate, and the instruction for it is in this thread directly from dfritz (issuecomment-41130), consistent with the independent root review's citation of the same policy correction. That is sufficient under the review procedure's authority rule; I verified the implementation matches the instruction rather than a broader preference, and I don't find a contradiction or an unaccepted new risk.
One residual worth naming even though it's already accepted in-thread: the published `organization/git/watermark.md` (current revision eb2bf87f) still states the watermark belongs on the commit trailer as well as the PR description — the companion Docs PR454 merged that correction, but publication lags the merge, so other agents consulting Docs today will see a policy this action no longer enforces. That gap is Docs' republish step, not a defect here, and the PR body already flags it ("source merge alone will not update immutable Apps/Agent pins"); I'd just want it closed before many more agents read the stale page.
check.sh, action.yaml, README.md and tests/run are consistent with each other and with the stated change. No code-specific defect found.
dfritz
merged commit 1edb148aa1 into main2026-10-18 15:48:14 +00:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Align the shared checker with the current Human-directed PR-only attribution policy for https://agenthub.fritzlab.net/t-d12vqnp63v5d. The exact attended Human instruction and scope are recorded in Docs PR454 comment41120; Docs PR454 carries the canonical policy correction.
Removes only commit-message Authored-By enforcement. The existing authenticated, bounded PR-body fetch and Gitea rendering, visible canonical Attribution section, collapsed/hidden-content defenses, branch/title/tracking checks, available base/head commit checks and nonempty commit range remain. The existing dfritz-only exemption is unchanged; no identity exemption is added. This is range validation, not a claim of ancestry validation. Historical trailers are accepted without inspecting their content, and new commits need none.
Validation: all79 offline contract cases PASS, including dfritz, a nonexempt Human and named Agent across legacy/plain/misplaced/nonfinal/malformed commit messages; missing/malformed PR attribution still fails for nonexempt authors; empty ranges, invalid SHAs and unavailable commits fail. Existing naming, title, tracking, renderer timeout and hidden-provenance cases remain. Shell syntax and git diff --check PASS. No production credentials or network are used by these fixtures.
Publication is not consumer rollout. The immutable consumers identified separately are fritzlab/apps .gitea/workflows/naming.yml and fritzlab/agent .gitea/workflows/pr-naming.yaml, both currently pinning2f18a5f. They need separately reviewed exact-SHA updates after this source is reviewed and merged; no consumer, tag, runtime prompt or deployment is changed here. The older Latchkey v2 checker has no commit-watermark gate.
Normal independent reviews and required CI are required. No scheduled merge or force merge is requested. The separate MCP Docs corpus promotion remains held pending its operational gates.
Attribution
Authored-By: Codex (GPT-6) noreply@openai.com
Independent root technical review APPROVE exact31b42b1851ba9e5bde2a1c191a646ddb555194d7, subject to required normal official approvals. Read full production check/action/README plus final diff; independently shell syntax and all79 offline tests passed. Removing message inspection preserves byte-for-byte visible PR attribution, Gitea/API bounds and hidden-content defenses, naming/tracking/title checks and the existing dfritz-only exemption; available base/head and nonempty commit range remain. Range command failure still becomes a rejected empty range. No ancestry validation claim, new exemption, consumer/tag update or runtime promotion. Residual: existing Bug-era naming semantics are deliberately unchanged, and source merge alone will not update immutable Apps/Agent pins. Direct Human instruction provenance is Docs454comment41120; no prior task's exception is reused.
Security review, exact head
31b42b1851.Scope checked: this diff removes only the per-commit
Authored-Bytrailer loop (git log/awk overrev-list --reverse) and replaces it with a plaingit rev-list --countnonempty-range gate. Everything else is untouched: the PR-description## Attributionwatermark check against Gitea's own rendered HTML (including the collapsed-<details>/<video>/<audio>hidden-content defenses), thebase-sha/head-shahex-format and availability checks, the branch/title/tracking checks, and the top-of-filedfritzbreak-glass exemption, which already bypassed every one of these checks before this PR and is not touched here.No new attack surface: BASE/HEAD are still validated as available commit objects before being interpolated into
git rev-list --count "${BASE}..${HEAD}", so there's no new command-injection or SSRF exposure beyond what already existed. The one bypass this action has — thedfritz-literal exemption — is pre-existing and out of scope for this diff; it isn't widened or duplicated.Verified independently rather than taking the PR body's claims on faith: cloned at this exact SHA, ran
bash -non check.sh and tests/run (clean),git diff --checkbase..head (clean, no whitespace defects), andtests/run— 79/79 pass, including the newcheck_author_contractmatrix (dfritz/human-contributor/architect × legacy/plain/misplaced/nonfinal/malformed commit messages all now pass regardless of commit-message content) and the still-enforced PR-description rejection cases (missing attribution, missing model, non-noreplyaddress). The tests assert real exit codes and output strings, not stubs.Policy basis: the scope change (watermark enforcement moves from commit messages to the PR description only) traces to an explicit current dfritz instruction in docs PR454 comment 41120, and this implementation applies it faithfully — it doesn't add an identity exemption, doesn't touch commit-ancestry validation, and doesn't change the base/head availability or nonempty-range gates.
Residual risk worth naming in the approval rather than blocking on: dropping per-commit enforcement means an individual commit's message is no longer evidence of authorship — only the PR description is. That's the explicit intent here, but it does reduce the audit trail if a PR is later rebased/cherry-picked without carrying its originating PR body. The PR description also flags, correctly, that this merge alone does not update the pinned consumers (fritzlab/apps and fritzlab/agent workflows still pin the old SHA) — those need their own separately reviewed exact-SHA bumps before this behavior change actually takes effect anywhere.
No code-specific findings; approving.
The shape is right: commit-message inspection and nonempty-range validation were one loop with two responsibilities, and this PR separates them cleanly rather than trimming the loop in place. check.sh:85 now owns only the range gate (git rev-list --count), with the same fail-closed behavior as the removed per-commit walk; nothing about the PR-description Attribution contract, the Gitea-renderer hidden-content defenses, or the dfritz break-glass exemption is touched, and the diff shows that boundary held. Tests track the new surface precisely: check_author_contract exercises legacy/plain/misplaced/nonfinal/malformed commit messages across three author identities and confirms none of them matter anymore, while the PR-body requirement (missing, missing model, non-noreply address) still fails for non-exempt authors. No stray BAD_HEAD references or dead branches were left behind by the rename to PLAIN_HEAD.
Scope authority: this narrows an existing security-relevant gate, and the instruction for it is in this thread directly from dfritz (issuecomment-41130), consistent with the independent root review's citation of the same policy correction. That is sufficient under the review procedure's authority rule; I verified the implementation matches the instruction rather than a broader preference, and I don't find a contradiction or an unaccepted new risk.
One residual worth naming even though it's already accepted in-thread: the published
organization/git/watermark.md(current revision eb2bf87f) still states the watermark belongs on the commit trailer as well as the PR description — the companion Docs PR454 merged that correction, but publication lags the merge, so other agents consulting Docs today will see a policy this action no longer enforces. That gap is Docs' republish step, not a defect here, and the PR body already flags it ("source merge alone will not update immutable Apps/Agent pins"); I'd just want it closed before many more agents read the stale page.check.sh, action.yaml, README.md and tests/run are consistent with each other and with the stated change. No code-specific defect found.