From b0f587a1fb4d27eea8828379a3c9ddf29a8ba2d1 Mon Sep 17 00:00:00 2001 From: Jose Celano Date: Thu, 8 Oct 2026 11:04:23 +0100 Subject: [PATCH 1/6] docs(discussions): adopt the round template in the AI model provenance discussion The opening author's round under the discussion round rules: the metadata table follows the template, the existing sections become the Context unchanged, and the nine open questions become topics Q1-Q9 with their words unchanged and no positions yet. Cameron's draft position on PR #2467 is linked from the Context, not copied, with its Part C mapped to the topics. --- .../README.md | 157 +++++++++++++----- 1 file changed, 117 insertions(+), 40 deletions(-) diff --git a/docs/discussions/2003-overhaul-guardrails-and-automation/20261007-ai-model-provenance-in-commits/README.md b/docs/discussions/2003-overhaul-guardrails-and-automation/20261007-ai-model-provenance-in-commits/README.md index 71eb5c0a2..d123d9b00 100644 --- a/docs/discussions/2003-overhaul-guardrails-and-automation/20261007-ai-model-provenance-in-commits/README.md +++ b/docs/discussions/2003-overhaul-guardrails-and-automation/20261007-ai-model-provenance-in-commits/README.md @@ -8,22 +8,37 @@ semantic-links: - .github/skills/dev/git-workflow/commit-changes/SKILL.md - .github/agents/committer.agent.md - docs/adrs/20260821172000_establish_ai_agent_context_capability_and_portability_governance.md + - docs/discussions/AGENTS.md + - docs/templates/DISCUSSION.md --- # AI Model Provenance in Commits -| Field | Value | -| ------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Status | Draft for review in the pull request that adds it | -| Started | 2026-10-07 | -| Participants | Jose Celano (the concern and the three purposes: tracking, analytics, legal); AI assistant using the Copilot SDK in VS Code, model `claude-opus-5.5` (research and draft) | -| Reviewer | Cameron (`da2ce7`), assignee of EPIC #2003 | -| Informs | EPIC #2003 - Overhaul: Automation Tools and AI Agent Guardrails | -| Scope | Aspect 2 (the commit-metadata contract and its format gate) and aspect 3 (the models an orchestration routes work to) of [Goals and Boundaries](../20261003-goals-and-boundaries/README.md): how a commit records which AI models were involved in its changes | +| Field | Value | +| -------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Status | Open for rounds | +| Started | 2026-10-07 | +| Opened by | Jose Celano (`josecelano`), who raised the concern and its three purposes (tracking, analytics, legal) | +| Decision owner | Cameron (`da2ce7`), assignee of EPIC #2003 | +| Informs | EPIC #2003 - Overhaul: Automation Tools and AI Agent Guardrails | +| Scope | Aspect 2 (the commit-metadata contract and its format gate) and aspect 3 (the models an orchestration routes work to) of [Goals and Boundaries](../20261003-goals-and-boundaries/README.md): how a commit records which AI models were involved in its changes | +| AI assistance | AI assistant using the Copilot SDK in VS Code, model `claude-opus-5.5` (research and draft) | -## Why This Discussion +## Context + +This discussion was opened in PR #2467 with a single-PR structure. It adopted the +[discussion template](../../../templates/DISCUSSION.md) in a round by its opening author, under the +round rules in [`docs/discussions/AGENTS.md`](../../AGENTS.md). The context below is unchanged; the +open questions moved into [Topics](#topics) without changes to their words. + +Cameron (`da2ce7`) posted a draft position on these questions as a pull-request comment on +PR #2467: . Its Part +C answers the topics: C1 (Q1), C2 (Q2), C3 (Q3 and Q4), C4 (Q5 and Q6), C5 (Q7), C6 (Q8), and C7 +(Q9). Under the round rules it is linked here, not copied, until he adds it in his own round. + +### Why This Discussion On 2026-10-06, while preparing the spec-only PR #2461 for issue #2458, an AI agent running in the Copilot SDK for VS Code added this trailer to three commits: @@ -45,7 +60,7 @@ that the owner of EPIC #2003 can decide before anything is implemented. Nothing here changes a specification or a rule. A conclusion takes effect only when the owner of EPIC #2003 records it. -## Why the Default Trailer Is Only Half Useful +### Why the Default Trailer Is Only Half Useful 1. **It records who made the commit, not who wrote the changes.** The harness adds the trailer whenever the agent runs `git commit`. A commit made by an agent can contain changes a human @@ -63,7 +78,7 @@ EPIC #2003 records it. 5. **It displays the bot as a co-author.** GitHub shows `Co-authored-by` identities as commit co-authors. That reads as shared authorship and accountability, which an AI model cannot hold. -## What the Project Wants from Attribution +### What the Project Wants from Attribution - **Tracking:** know, for any change, which models were involved and in what role. - **Analytics:** compare models with review findings, regressions, and rework. For example: which @@ -71,7 +86,7 @@ EPIC #2003 records it. - **Legal and compliance readiness:** keep an auditable provenance record of AI involvement. The EU AI Act transparency rules are the main reason to ask this now (see below). -## Precedent in Other Projects +### Precedent in Other Projects Checked on 2026-10-06 on the projects' own pages. @@ -94,7 +109,7 @@ Both projects use `Assisted-by`, not `Co-authored-by`, and both keep a human acc requires a precise model identifier or more than one model per commit. The purposes above would take this project further than both. -## EU AI Act +### EU AI Act This section needs legal review and is not legal advice. @@ -113,7 +128,7 @@ Whether an open-source project that commits AI-assisted code has any obligation established**. The project should not claim compliance. It can record the question for legal input and design provenance metadata that would support compliance if it turns out to be needed. -## Options +### Options | ID | Option | Pros | Cons | | --- | -------------------------------------------------------------- | -------------------------------------------------------------------- | ------------------------------------------------------------------- | @@ -125,7 +140,7 @@ and design provenance metadata that would support compliance if it turns out to Commit trailers stay with the code after merge, because this repository does not squash. That is the main argument against O2. -## Draft Conclusions +### Draft Conclusions These are the drafting agent's proposals, not decisions. @@ -143,30 +158,7 @@ These are the drafting agent's proposals, not decisions. 5. **Add an interim rule now.** Until the decision is recorded, `AGENTS.md` tells agents not to add provider-default AI trailers. -## Open Questions for the Reviewer - -1. **Granularity:** should provenance live in commit trailers, in the PR body, in issue-local - evidence, or in a combination? -2. **Which models count:** only models whose output is in the diff, or also models that explored, - reviewed, or planned? If reviewers count, they need a separate key so they are not confused - with authors. -3. **Identifier format:** is `:/` acceptable, and how should unknown - versions be recorded? -4. **Trailer key:** `Assisted-by`, for compatibility with the kernel and Fedora, or a - project-specific key that adds the role, such as `AI-Model:` or `Generated-by:`? -5. **Source of truth:** the harness knows which models ran, through model-switch notices, subagent - configuration, and session logs. Who is responsible for collecting the list: the agent, the - harness, or the human committer? -6. **Human edits and rewrites:** how is the list kept correct when a human edits AI output, when - commits are reworded or rebased, or when changes move between commits? -7. **Enforcement:** document the rule only, or also validate the trailer format in a `commit-msg` - check? A tool can check the format of a declared trailer. It cannot check whether a declaration - is complete. -8. **Interim rule:** should `AGENTS.md` forbid provider-default AI trailers before the decision? -9. **Legal input:** who reviews the EU AI Act question, and does the answer change the required - level of detail? - -## Follow-up Work if Accepted +### Follow-up Work if Accepted An issue specification, created after the outcome is recorded, carries the decision: @@ -185,6 +177,91 @@ An issue specification, created after the outcome is recorded, carries the decis Rewriting historical commits, giving legal advice, and changing the GPG-signing policy are out of scope. +## Topics + +### Q1 - Granularity + +Should provenance live in commit trailers, in the PR body, in issue-local evidence, or in a +combination? Added by Jose Celano. + +#### Positions + +No positions yet. + +### Q2 - Which models count + +Only models whose output is in the diff, or also models that explored, reviewed, or planned? If +reviewers count, they need a separate key so they are not confused with authors. Added by Jose +Celano. + +#### Positions + +No positions yet. + +### Q3 - Identifier format + +Is `:/` acceptable, and how should unknown versions be recorded? Added by +Jose Celano. + +#### Positions + +No positions yet. + +### Q4 - Trailer key + +`Assisted-by`, for compatibility with the kernel and Fedora, or a project-specific key that adds the +role, such as `AI-Model:` or `Generated-by:`? Added by Jose Celano. + +#### Positions + +No positions yet. + +### Q5 - Source of truth + +The harness knows which models ran, through model-switch notices, subagent configuration, and +session logs. Who is responsible for collecting the list: the agent, the harness, or the human +committer? Added by Jose Celano. + +#### Positions + +No positions yet. + +### Q6 - Human edits and rewrites + +How is the list kept correct when a human edits AI output, when commits are reworded or rebased, or +when changes move between commits? Added by Jose Celano. + +#### Positions + +No positions yet. + +### Q7 - Enforcement + +Document the rule only, or also validate the trailer format in a `commit-msg` check? A tool can +check the format of a declared trailer. It cannot check whether a declaration is complete. Added by +Jose Celano. + +#### Positions + +No positions yet. + +### Q8 - Interim rule + +Should `AGENTS.md` forbid provider-default AI trailers before the decision? Added by Jose Celano. + +#### Positions + +No positions yet. + +### Q9 - Legal input + +Who reviews the EU AI Act question, and does the answer change the required level of detail? Added +by Jose Celano. + +#### Positions + +No positions yet. + ## Outcome -Pending review. +Pending: no decision recorded. From 27856354bfc6ed4fc9506823263f9c3e2e5ce077 Mon Sep 17 00:00:00 2001 From: Jose Celano Date: Thu, 8 Oct 2026 11:22:23 +0100 Subject: [PATCH 2/6] docs(discussions): state that each provenance topic gained an attribution line The Context said the open questions moved into Topics without changes to their words, but each topic also gained the template's "Added by" line. --- .../20261007-ai-model-provenance-in-commits/README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/discussions/2003-overhaul-guardrails-and-automation/20261007-ai-model-provenance-in-commits/README.md b/docs/discussions/2003-overhaul-guardrails-and-automation/20261007-ai-model-provenance-in-commits/README.md index d123d9b00..ca662bad0 100644 --- a/docs/discussions/2003-overhaul-guardrails-and-automation/20261007-ai-model-provenance-in-commits/README.md +++ b/docs/discussions/2003-overhaul-guardrails-and-automation/20261007-ai-model-provenance-in-commits/README.md @@ -31,7 +31,8 @@ semantic-links: This discussion was opened in PR #2467 with a single-PR structure. It adopted the [discussion template](../../../templates/DISCUSSION.md) in a round by its opening author, under the round rules in [`docs/discussions/AGENTS.md`](../../AGENTS.md). The context below is unchanged; the -open questions moved into [Topics](#topics) without changes to their words. +open questions moved into [Topics](#topics) without changes to their words, and each topic gained +the template's "Added by" attribution. Cameron (`da2ce7`) posted a draft position on these questions as a pull-request comment on PR #2467: . Its Part From f70c40313a689ab2e195dafc7ab25c4a72022f2d Mon Sep 17 00:00:00 2001 From: Jose Celano Date: Thu, 8 Oct 2026 11:23:09 +0100 Subject: [PATCH 3/6] docs(discussions): link the first mention of PR #2467 in the provenance Context --- .../20261007-ai-model-provenance-in-commits/README.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/docs/discussions/2003-overhaul-guardrails-and-automation/20261007-ai-model-provenance-in-commits/README.md b/docs/discussions/2003-overhaul-guardrails-and-automation/20261007-ai-model-provenance-in-commits/README.md index ca662bad0..256cf78ce 100644 --- a/docs/discussions/2003-overhaul-guardrails-and-automation/20261007-ai-model-provenance-in-commits/README.md +++ b/docs/discussions/2003-overhaul-guardrails-and-automation/20261007-ai-model-provenance-in-commits/README.md @@ -28,11 +28,12 @@ semantic-links: ## Context -This discussion was opened in PR #2467 with a single-PR structure. It adopted the -[discussion template](../../../templates/DISCUSSION.md) in a round by its opening author, under the -round rules in [`docs/discussions/AGENTS.md`](../../AGENTS.md). The context below is unchanged; the -open questions moved into [Topics](#topics) without changes to their words, and each topic gained -the template's "Added by" attribution. +This discussion was opened in [PR #2467](https://github.com/torrust/torrust-tracker/pull/2467) with +a single-PR structure. It adopted the [discussion template](../../../templates/DISCUSSION.md) in a +round by its opening author, under the round rules in +[`docs/discussions/AGENTS.md`](../../AGENTS.md). The context below is unchanged; the open questions +moved into [Topics](#topics) without changes to their words, and each topic gained the template's +"Added by" attribution. Cameron (`da2ce7`) posted a draft position on these questions as a pull-request comment on PR #2467: . Its Part From 149a1748e096fac7233abb24c8e37ffe4a801d45 Mon Sep 17 00:00:00 2001 From: Jose Celano Date: Thu, 8 Oct 2026 11:24:44 +0100 Subject: [PATCH 4/6] docs(pr-reviews): add the PR #2487 review audit Records Copilot review 5455109937 (F1, F2) with their fixes, verification, and reply URLs. --- docs/pr-reviews/pr-2487-review/PR-REVIEW.md | 111 ++++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 docs/pr-reviews/pr-2487-review/PR-REVIEW.md diff --git a/docs/pr-reviews/pr-2487-review/PR-REVIEW.md b/docs/pr-reviews/pr-2487-review/PR-REVIEW.md new file mode 100644 index 000000000..db90da5ab --- /dev/null +++ b/docs/pr-reviews/pr-2487-review/PR-REVIEW.md @@ -0,0 +1,111 @@ +--- +semantic-links: + skill-links: + - process-pr-review + related-artifacts: + - .github/skills/dev/pr-reviews/process-pr-review/SKILL.md + - docs/discussions/2003-overhaul-guardrails-and-automation/20261007-ai-model-provenance-in-commits/README.md +--- + + + +# PR #2487 Review Audit + +Source: pull-request reviews and inline review threads for . + +## Ownership + +The PR author owns this tracked audit record. Reviewers, including repository review agents, +deliver findings through GitHub and have no repository-artifact obligation. + +- Post-merge workflow approval: N/A + +## Status Values + +- Relationship: `ORIGINAL`, `RE_RAISE_OF:` +- Disposition: `FIXED`, `NO_ACTION`, `SUPERSEDED`, `FOLLOW_UP` +- Thread state: `OPEN`, `RESOLVED`, `NON_RESOLVABLE`, `SUPERSEDED`. `OPEN` applies prospectively + to audits created or updated for approved follow-up work; historical audits remain valid without + bulk migration. +- Severity: `Blocker`, `Major`, `Minor`, `Nit`, `Suggestion`; append `(inferred)` when derived + from free prose. +- Author class: `Copilot`, `Human`, `Unknown` +- Category: `link-integrity`, `formatting`, `metadata`, `testing`, `correctness`, `documentation`, + `maintainability`, `security`, `other` +- An outdated thread whose concern was fixed is `FIXED`/`RESOLVED`, even when GitHub marks the + original thread outdated after the push. For in-PR feedback, use `NO_ACTION`/`SUPERSEDED` only + for a duplicate, superseded, or no-change concern. A post-merge `NO_ACTION` requires maintainer + approval to decline the follow-up work. + +## Findings + +Copilot review 5455109937 (10:20 UTC) supplied no finding IDs, so its two inline comments take `F1` +and `F2` in source order. Their severities are inferred from the review's badges, as in the PR #2461 +audit: Medium as Minor, and Low as Suggestion for the "Consider linking" comment. The review body +lists the two threads and a warning that the full agentic review did not start before its timeout; +neither adds a request, so they get no row. + +| Finding ID | Review finding reference | Author class | Severity | Category | Relationship | Disposition | Thread state | +| ---------- | ------------------------ | ------------ | -------- | -------- | ------------ | ----------- | ------------ | +| F1 | `review-finding:pr-2487-f1` | Copilot | Minor (inferred) | correctness | ORIGINAL | FIXED | RESOLVED | +| F2 | `review-finding:pr-2487-f2` | Copilot | Suggestion (inferred) | link-integrity | ORIGINAL | FIXED | RESOLVED | + +## Finding Details + +### F1 - The word-for-word claim omitted the added attribution lines + +- PR number: 2487 +- Source review ID: 5455109937 +- Reviewer finding ID: N/A +- Source URL: +- Concern: The PR description and the Context said each topic kept the open question's words, but + each topic also appends "Added by Jose Celano.", so the claim was inaccurate. +- Solution: Kept the attribution, which the discussion template asks for, and corrected the Context + sentence to say that each topic gained the template's "Added by" attribution. The PR description + was edited to say the same and that the word-for-word check ran after removing that line. +- Current-tree verification: the README's :34-36 end "each topic gained the template's \"Added by\" + attribution."; `linter markdown` and `linter lychee` exit 0; the PR description contains "after + removing the added". +- Resolution reference: docs(discussions): state that each provenance topic gained an attribution line +- Follow-up PR URL: N/A +- Reply URL: + +### F2 - Link the first mention of PR #2467 + +- PR number: 2487 +- Source review ID: 5455109937 +- Reviewer finding ID: N/A +- Source URL: +- Concern: The Context's first mention of PR #2467 was not a link, although a later sentence links + it. +- Solution: Linked the first mention and reflowed the paragraph. +- Current-tree verification: the README's :31 reads "This discussion was opened in + [PR #2467](https://github.com/torrust/torrust-tracker/pull/2467) with"; `linter markdown` and + `linter lychee` exit 0. +- Resolution reference: docs(discussions): link the first mention of PR #2467 in the provenance Context +- Follow-up PR URL: N/A +- Reply URL: + +## Processing Log + +- 2026-10-08 10:21 UTC - Started audit. Fetched the two review threads with GraphQL (unresolved, + not outdated) and the review body; normalized them into F1 and F2. +- 2026-10-08 10:23 UTC - Pushed both fixes after the pre-commit gate passed, edited the PR + description for F1, re-checked both claims against the pushed tree, and replied on both threads. + +## Completion Rules + +- Re-derive the reply claim against the current tree before replying or resolving a thread. +- Reply on every resolvable thread before resolving it. +- For an outdated thread whose concern was fixed, record `Disposition=FIXED` and + `Thread state=RESOLVED`, even if GitHub marks the thread outdated after the push. For a + duplicate, superseded, or no-change in-PR thread, reply exactly + `Superseded by : .`, record `Disposition=NO_ACTION` and + `Thread state=SUPERSEDED`, then resolve it. A post-merge `NO_ACTION` requires maintainer + approval to decline the follow-up work. +- A consolidated PR conversation response may cover multiple review rounds only when it names + every review ID and every finding ID with its disposition and resolution reference. Record its + durable URL in each related row. +- Cite a fix by its unique Conventional Commit subject or durable reply URL, never by a branch SHA + that can change after a rebase. +- Refresh review threads using GraphQL and confirm that no unresolved actionable thread remains. From f8f88b7e5de692ff2275e4f65657d5b2a5197295 Mon Sep 17 00:00:00 2001 From: Jose Celano Date: Thu, 8 Oct 2026 11:34:46 +0100 Subject: [PATCH 5/6] docs(pr-reviews): copy the Status Values block verbatim in the PR #2487 audit Same defect that da2ce7 raised on the PR #2485 audit (review-finding:pr-2485-f2): the Category item wrapped after documentation instead of after correctness as in the template's verbatim block. --- docs/pr-reviews/pr-2487-review/PR-REVIEW.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/pr-reviews/pr-2487-review/PR-REVIEW.md b/docs/pr-reviews/pr-2487-review/PR-REVIEW.md index db90da5ab..d3f2b7844 100644 --- a/docs/pr-reviews/pr-2487-review/PR-REVIEW.md +++ b/docs/pr-reviews/pr-2487-review/PR-REVIEW.md @@ -30,8 +30,8 @@ deliver findings through GitHub and have no repository-artifact obligation. - Severity: `Blocker`, `Major`, `Minor`, `Nit`, `Suggestion`; append `(inferred)` when derived from free prose. - Author class: `Copilot`, `Human`, `Unknown` -- Category: `link-integrity`, `formatting`, `metadata`, `testing`, `correctness`, `documentation`, - `maintainability`, `security`, `other` +- Category: `link-integrity`, `formatting`, `metadata`, `testing`, `correctness`, + `documentation`, `maintainability`, `security`, `other` - An outdated thread whose concern was fixed is `FIXED`/`RESOLVED`, even when GitHub marks the original thread outdated after the push. For in-PR feedback, use `NO_ACTION`/`SUPERSEDED` only for a duplicate, superseded, or no-change concern. A post-merge `NO_ACTION` requires maintainer From c98d4186ad342f6b9f14a43e9e6cf1601c462f65 Mon Sep 17 00:00:00 2001 From: Jose Celano Date: Thu, 8 Oct 2026 13:16:26 +0100 Subject: [PATCH 6/6] docs(pr-reviews): record da2ce7 round-1 approval and F3 on #2487 --- docs/pr-reviews/pr-2487-review/PR-REVIEW.md | 31 +++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/docs/pr-reviews/pr-2487-review/PR-REVIEW.md b/docs/pr-reviews/pr-2487-review/PR-REVIEW.md index d3f2b7844..fac8afa52 100644 --- a/docs/pr-reviews/pr-2487-review/PR-REVIEW.md +++ b/docs/pr-reviews/pr-2487-review/PR-REVIEW.md @@ -45,10 +45,15 @@ audit: Medium as Minor, and Low as Suggestion for the "Consider linking" comment lists the two threads and a warning that the full agentic review did not start before its timeout; neither adds a request, so they get no row. +Human review 5455373856 by `da2ce7` (`APPROVED`, round 1, 10:45 UTC) supplied the finding ID `F1` +with a non-blocking `[Minor]` severity. `F1` collides with this audit, so it takes `F3`. The review +body summarizes that thread and lists the rest under "Checked, no finding", so it adds no other row. + | Finding ID | Review finding reference | Author class | Severity | Category | Relationship | Disposition | Thread state | | ---------- | ------------------------ | ------------ | -------- | -------- | ------------ | ----------- | ------------ | | F1 | `review-finding:pr-2487-f1` | Copilot | Minor (inferred) | correctness | ORIGINAL | FIXED | RESOLVED | | F2 | `review-finding:pr-2487-f2` | Copilot | Suggestion (inferred) | link-integrity | ORIGINAL | FIXED | RESOLVED | +| F3 | `review-finding:pr-2487-f3` | Human | Minor | documentation | ORIGINAL | FIXED | RESOLVED | ## Finding Details @@ -86,12 +91,38 @@ neither adds a request, so they get no row. - Follow-up PR URL: N/A - Reply URL: +### F3 - The Outcome placeholder changed without being stated + +- PR number: 2487 +- Source review ID: 5455373856 +- Reviewer finding ID: F1 +- Source URL: +- Concern: The Outcome placeholder changed from "Pending review." to the template's "Pending: no + decision recorded." in a round that is not a decision round, and none of the round's statements + of its changes (the Context paragraph, the first commit body, the PR body) mentioned it. The + reviewer did not block, because adopting the template brings its placeholder, and suggested a + line in the PR body, which becomes the merge commit message. +- Solution: Kept the placeholder and added the suggested line to the PR body's Changes list. The + README is unchanged. +- Current-tree verification: the PR body contains "The Outcome placeholder now reads as the + template's"; the README's Outcome still reads "Pending: no decision recorded.". +- Resolution reference: +- Follow-up PR URL: N/A +- Reply URL: + ## Processing Log - 2026-10-08 10:21 UTC - Started audit. Fetched the two review threads with GraphQL (unresolved, not outdated) and the review body; normalized them into F1 and F2. - 2026-10-08 10:23 UTC - Pushed both fixes after the pre-commit gate passed, edited the PR description for F1, re-checked both claims against the pushed tree, and replied on both threads. +- 2026-10-08 10:34 UTC - Copied the Status Values block verbatim from the template, the same fix + that `review-finding:pr-2485-f2` required on the PR #2485 audit. +- 2026-10-08 12:15 UTC - Human review 5455373856 (`da2ce7`, round 1) approved at the head that + carried the verbatim fix and raised F3 (reviewer F1). Fixed F3 by editing the PR body, posted + the resolution comment, and replied on the thread. Then rebased onto `develop`, which had moved + six commits, so the merge tool would accept the merge; the push moves the head off the approved + commit, so the reviewer was asked to re-ACK the new head. ## Completion Rules