Skip to content

docs(issues): add issue specification for #2855 - #2856

Open
josecelano-bot wants to merge 9 commits into
torrust:developfrom
josecelano-bot:2855-container-regression-timeout-sigint-spec
Open

josecelano-bot wants to merge 9 commits into
torrust:developfrom
josecelano-bot:2855-container-regression-timeout-sigint-spec

Conversation

@josecelano-bot

@josecelano-bot josecelano-bot commented Nov 13, 2026 •

Copy link
Copy Markdown
Contributor

Related to #2855

Summary

Adds the folder-style issue specification for #2855, a Container workflow regression: the "Run Persistence Transition Regression" step fails on develop and on unrelated PRs because the regression script's timeout call lacks --foreground, so uutils timeout (the self-hosted runner's rust-coreutils was upgraded 0.8.0 to 0.10.0 on 2026-11-12) runs, the tracker never receives SIGINT (whether because timeout does not forward it to the docker run client or because the client does not forward it onward is a documented hypothesis, not a settled fact), giving exit status 137 instead of the accepted 0 or 124. Root cause, local reproduction, and runner-side confirmation (apt history, and the leftover containers the bug leaves on the runner) are recorded in the spec and its manual-verification-evidence.md.

Files touched

  • docs/issues/open/2855-container-regression-timeout-sigint/ISSUE.md (new)
  • docs/issues/open/2855-container-regression-timeout-sigint/manual-verification-evidence.md (new)
  • docs/pr-reviews/pr-2856-review/PR-REVIEW.md (new)
  • project-words.txt (adds gnutimeout, readlink, uutils)

Validation performed

  • linter all passes on this branch.
  • No package tests apply; this PR changes documentation only.

Spec-only PR; no implementation changes. The implementation merged separately in PR #2857, from the 2855-container-regression-timeout-sigint branch (base develop, not this branch).

🤖 Generated with Claude Code

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>

@da2ce7 da2ce7 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed at 9796436047f042efb5d2800d89ad4ec973706a81. Recomputed from the bytes at this head, against the merge base ec1f58ec9; git merge-tree against develop ec1f58ec9 merges cleanly, and the merged tree equals the head's tree.

Process: a spec-only bug PR, governed by .github/skills/dev/planning/create-issue/SKILL.md and .github/skills/dev/debugging/fix-bug/SKILL.md, and for the description by open-pull-request. The folder layout, the frontmatter (the validator's issue profile, planned in open/, matching spec-path and -spec branch), the bug-only sections, the evidence file and the commit subject follow them.

The change against its claim: the quoted timeout call and the 0-or-124 test match the script (lines 32 and 39); the step, job, runner label, host and OS match the workflow and the runner documentation; the develop range between the last green and first red runs touches only docs/; the cited ADR, skills and script exist, and the quoted log lines are in src/main.rs. The runner-side evidence (V4) shows output its named command cannot print, and the local reproduction (V1) does not record its invocation.

Consistency: the new files carry no links; an open spec without an EPIC needs no index row; gnutimeout and uutils are used in the change and keep the dictionary C-sorted and unique.

Hygiene: one commit, the subject form the skill prescribes, an empty body, author equals committer, and one attribution footer line (no rule in the tree on it); the description carries one attribution footer line too. git diff --check is clean, the skill's commit-id check prints nothing, and the closing-keyword pattern matches nothing in the title, description or message; the description links the issue with Related to.

Findings

  • F1 Major: the V4 output is not what its named command prints.
  • F2 Minor: V1 and M3 do not record a repeatable invocation.
  • F3 Minor: Background step 3 puts the fault in the docker client; V2 puts it in delivery.
  • F4 Minor: the impact omits the container each failed run leaves running.
  • F5 Minor: the description lacks required sections and inverts head and base.
  • F6 Nit: T2 status and scenario order.
  • F7 Nit: progress-log time and dropped template checkpoints.

Checked, no finding: frontmatter, related artifacts, script quotes, workflow names, ADR path, log strings, the develop range, dictionary, merge, whitespace, commit ids, closing keywords.

Checks

On the loop's compute node at this head, against the merge base ec1f58ec9 (receipt server-gates-kranich-814): the repository's pre-commit gate and lint roster exit 0 and the tree left clean. The PR changes documentation only, so no package tests apply. F1 checked against the bytes at posting: the V4 block names dpkg -l | grep coreutils; grep -h -B2 -A3 rust-coreutils /var/log/apt/history.log*, and its output includes a /usr/bin/timeout -> ../lib/cargo/bin/coreutils/timeout (timeout (uutils coreutils) 0.10.0) line that neither command prints. There are no review threads yet. GitHub checks at this head at posting time: "Docs Lint: completed/success". At posting, develop is ec1f58ec9.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Warning

Copilot couldn't run its full agentic review because it didn't start before the timeout. Make sure your repository has a runner available, or add a copilot-code-review.yml file specifying one with the runs-on attribute. See the docs for more details.

Copilot review overview

3 open issues
What changed in this PR

Adds a folder-style issue specification for #2855 documenting a Container workflow regression where uutils timeout (without --foreground) fails to forward SIGINT to docker run, plus supporting manual verification evidence.

Changes:

  • Added issue spec documenting root cause, scope, and verification plan for #2855.
  • Added manual verification evidence capturing reproduction and runner package history.
  • Updated project dictionary to include new domain terms (gnutimeout, uutils).
File Description
project-words.txt Adds spellchecker allowlist entries for terms used in the spec/evidence.
docs/​issues/​open/​2855-container-regression-timeout-sigint/​ISSUE.md Introduces the issue specification for the regression (background, plan, acceptance/verification).
docs/​issues/​open/​2855-container-regression-timeout-sigint/​manual-verification-evidence.md Captures reproduction results, command matrix, and runner package upgrade evidence.

Review effort: Lite

…F1-F7

- V1: record the exact edit and invocation used to reproduce the red run
  (F2).
- V2: reformat as a numbered table with the actual observed output per row;
  state the mechanism as a hypothesis instead of an unverified claim (F3).
- V3: record the recheck after the fix, with both timeout implementations
  (previously TODO).
- V4: split the runner check into the three commands actually run, each
  with its own real output, instead of one block no single command could
  print (F1).
- V5: record the leftover containers the bug leaves on the runner, and why
  the daily prune does not remove them (F4).
- ISSUE.md: align the Background, Scope, Implementation Plan, checkpoints,
  M-table and AC table with the above; restore the three workflow
  checkpoints the draft had dropped; add HH:MM to the second progress-log
  entry (F6, F7).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

@da2ce7 da2ce7 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed at f2f0e4e7359be7770252de3d12083f40c24b35ff. Recomputed from the bytes at this head, against the merge base ec1f58ec9; git merge-tree against develop ec1f58ec9 merges cleanly, and the merged tree equals the head's tree.

Process: the same three skills govern. The new commit fast-forwards the last reviewed head and edits the spec, the evidence and the dictionary. All ten threads are answered and resolved, but the head carries no review audit record, which the review-processing skill requires from the first review (F10).

The change against its claim: the commit does what its body lists. F1 is resolved: V4 now shows three commands whose outputs fit them, including the -B2 -A3 context. F5 and F6 are resolved too. F2, F3 and F7 are resolved except for the leftovers raised as F11, F13 and F14. The F4 change adds new evidence (V5), and its listing has the same defect as F1 (F8).

Consistency: the tables keep their column counts and the frontmatter stays valid (related-pr is a positive integer). The evidence uses readlink, and the dictionary stays C-sorted and unique.

Hygiene: two commits with Conventional subjects, author equals committer, each with one attribution footer line (no rule in the tree on it); the description carries one attribution footer line too. git diff --check is clean, the commit-id check prints nothing, and the closing-keyword pattern matches nothing in the title, description or messages.

Findings

  • F8 Major: the V5 listing shows a line head -5 cannot print, or else its "oldest" claim is wrong.
  • F9 Minor: the impact states as fact a cause that V5 says is unproven.
  • F10 Minor: no review audit record, and nine replies cite a branch commit id.
  • F11 Minor: the description still states the mechanism as fact.
  • F12 Minor: the spec-only PR records results from the unmerged implementation PR.
  • F13 Nit: the V1 edit has a no-op pair and omits the PROJECT_ROOT change.
  • F14 Nit: the backfilled 10:40 time is later than the commit that contains the entry.

Checked, no finding: V2 rows and conclusion, V3 commands and its PATH selection, V4 outputs, frontmatter, tables, dictionary, merge, whitespace, commit ids, closing keywords.

Checks

On the loop's compute node at this head, against the merge base ec1f58ec9 (receipt server-gates-kranich-829): the repository's pre-commit gate and lint roster exit 0 and the tree left clean. The PR has no review audit record at this head (F10), so the audit validator was not run in the gate. The PR changes documentation only, so no package tests apply. F8 checked against the bytes at posting: the V5 block runs docker ps -a ... | head -5, which lists the five newest containers, and then presents its fifth line as the oldest of 26. Read on the forge: all 10 review threads are answered and resolved. GitHub checks at this head at posting time: "". At posting, develop is ec1f58ec9.

@josecelano

Copy link
Copy Markdown
Member

ACK f2f0e4e

@josecelano
josecelano requested review from da2ce7 and a balanced review from Copilot November 13, 2026 13:04

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

The recorded reproduction cannot be rerun from a fresh checkout because the instrumented script is missing and the displayed patch omits the required PROJECT_ROOT change.

1 open issue
3 resolved since last review

Review effort: Balanced

@josecelano-bot

Copy link
Copy Markdown
Contributor Author

F11: reworded the PR description's summary from stating the forward mechanism as fact ("never forwards SIGINT") to "the tracker never receives SIGINT", naming the forwarding-vs-delivery question as a hypothesis, matching ISSUE.md's Background step 3.

josecelano-bot and others added 3 commits November 13, 2026 15:23
…F8-F14

Re-ran V5 on the self-hosted runner with a full container listing, an
exited-count check, and image/mount identification (31 containers, all
this script's, oldest predating the last green run); softened Impact's
leftover-container claim to match; named the fixing commit (PR torrust#2857)
in V3 and marked T3/T4/AC1-AC3 as validated on that branch; replaced
the V1 diff with a complete, reapplyable patch covering both real
edits; fixed a progress-log timestamp that postdated its own commit.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Creates docs/pr-reviews/pr-2856-review/PR-REVIEW.md, started late
(round 2 finding F10): records all 18 findings from both review
rounds (da2ce7 and Copilot), their dispositions, and the mapping from
the nine round-1 replies' cited branch commit id to its Conventional
Commit subject.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…6 audit

Replaces the F8-F14/F18 Reply URL placeholders (which had pointed at
the reviewer's own source comment) with the actual reply comments
posted and used to resolve each thread.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@josecelano

Copy link
Copy Markdown
Member

ACK 3636789

da2ce7
da2ce7 previously approved these changes Nov 13, 2026

@da2ce7 da2ce7 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed at 3636789e40ee1f10efdf3144fe261e08f1187cb8. Recomputed from the bytes at this head, against the merge base ec1f58ec9; git merge-tree against develop ec1f58ec9 merges cleanly, and the merged tree equals the head's tree.

Process: three new commits fast-forward the last reviewed head. The first revises the spec and the evidence, the second adds the review audit record, so F10 is resolved, and the third points the eight round-2 Reply URLs at the actual replies. Run offline against the captured threads, the audit validator's logic passes on all 18 rows, and every thread has a reply and an audit row.

The change against its claim: each commit does what its message says. F8 and F9 are resolved: V5 now shows the full listing, a count of exited containers and the image and mount of each container, and the impact carries V5's hedge. F11, F12 and F14 are resolved, and so is F13: the patch reconstructs both edits. The remaining points do not block: the V5 elision does not add up (F17), the V1 patch has a miscounted header (F18), and the new timestamps are earlier than the V5 rerun they report (F19).

Consistency: every table keeps its column count, and every resolution subject exists in the branch.

Hygiene: five commits with Conventional subjects, author equals committer, each with one attribution footer line (no rule in the tree on it); the description carries one attribution footer line too. git diff --check is clean, and the closing-keyword pattern matches nothing. The commit-id check prints two ids (F16).

Findings

  • F15 Nit: the audit record lacks the template's skill-link marker.
  • F16 Minor: the audit cites the first commit by id, and so does one new reply.
  • F17 Minor: the V5 listing's elision adds up to 32 containers, not 31.
  • F18 Nit: the V1 patch's second hunk header is miscounted, and the prose misplaces the copy.
  • F19 Nit: the 14:00 stamps are earlier than the V5 rerun they report.
  • F20 Nit: the description's file list and the linter all criterion are stale.

Checked, no finding: V5 identification and exited count, the impact's hedge, V3's named subject, status qualifiers, the logged deviation, the 10:12 stamp, the patch result, audit rows and reply URLs, review ids and severities, resolution subjects, the merge, whitespace, closing keywords.

Checks

On the loop's compute node at this head, against the merge base ec1f58ec9 (receipt server-gates-kranich-844): the repository's pre-commit gate and lint roster exit 0 and the tree left clean; the repository's audit validator on pr-2856-review exit 0 (18 rows, 2 log entries, no failures). At the previous head 3841cefbc the same validator exited 1 with 8 failures (receipt server-gates-kranich-842). The PR changes documentation only, so no package tests apply. F17 checked against the bytes at posting: the V5 listing shows five rows and "27 more lines", while docker ps -a -q | wc -l prints 31. Read on the forge: all 18 review threads are answered and resolved. GitHub checks at this head at posting time: "Docs Lint: completed/success". At posting, develop is ec1f58ec9.

@da2ce7

da2ce7 commented Nov 13, 2026

Copy link
Copy Markdown
Contributor

ACK 3636789 — spec, evidence and audit record recomputed from the bytes at this head, with the audit validator's logic passing on all 18 rows and a clean trial merge into develop

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

The review audit double-counts a re-raised finding, and the manual verification evidence contains unresolved container-count and capture-time inconsistencies.

3 open issues
1 resolved since last review

Review effort: Balanced

josecelano added a commit that referenced this pull request Nov 13, 2026
…foreground

38d7631 docs(pr-reviews): [#2855] create the PR 2857 review audit record (josecelano-bot)
a186f9e fix(container): [#2855] address PR #2857 review findings F2-F4,F7 (josecelano-bot)
08e4d2b fix(container): [#2855] stop the tracker with timeout --foreground (josecelano-bot)

Pull request description:

  Closes #2855. Intended merge order: #2856 (spec-only, folder-style issue specification and evidence for #2855) first, then this PR.

  Fixes the Container workflow's "Run Persistence Transition Regression" step, which has been failing on `develop` and on unrelated PRs since 2026-11-12 (first bad run 43184363486, last good run 43059027926).

  ## Root cause

  `run_tracker` in `test-mounted-no-persistence-configuration.sh` runs `timeout --signal=INT --kill-after=3s 10s docker run ...` and only accepts exit status 0 or 124. On the self-hosted CI runner (`torrust-runner-01`, Ubuntu 26.04.1), `timeout` is provided by `rust-coreutils` (the uutils implementation), which was upgraded 0.8.0 -> 0.10.0 on 2026-11-12 06:36 UTC. Without `--foreground`, that `timeout` does not forward SIGINT to the `docker run` client; the tracker never receives the signal, and `--kill-after=3s` SIGKILLs the client instead, giving exit status 137. The tracker itself shuts down correctly on SIGINT and SIGTERM in every case tested (`docker kill --signal=INT/TERM`, GNU `timeout` with or without `--foreground`, uutils `timeout --foreground`).

  ## Fix

  Add `--foreground` to the `timeout` invocation, and report the unexpected exit status on failure so a future regression is diagnosable from the CI log alone.

  ## Verification

  Ran the script locally against a release image built from `develop` at the merge of #2841, with both `timeout` implementations:

  - uutils `timeout` 0.10.0 (as on the runner): before the fix, exit 137 and no shutdown log line (reproducing the CI failure); after the fix, exit 0 and both regression markers printed.
  - GNU `timeout` 9.7: exit 0 and both markers printed, before and after.

  `linter all` passes.

  ## Files touched

  - `contrib/dev-tools/containers/tests/test-mounted-no-persistence-configuration.sh`: adds `--foreground` to the `timeout` invocation and reports the unexpected exit status on failure.
  - `project-words.txt`: adds `uutils`.

  Full root-cause analysis and evidence: #2855 and the spec in #2856.

  🤖 Generated with [Claude Code](https://claude.com/claude-code)

ACKs for top commit:
  da2ce7:
    ACK 38d7631 — the `timeout --foreground` fix and its single exit-status `case` behave correctly for every status class, F1 to F5 are resolved, the audit record passes the validator's logic offline with a reply, row and resolution for all seven threads, and the branch merges cleanly onto `ec1f58ec9`
  josecelano:
    ACK 38d7631

Tree-SHA512: 39dc70d0836f81e6f56c69f80204ffcf1e2509390b05c6e63dc2d0fc6ed6a97072e5577a8ad85723d076219464199e8f14a7faddf032c4a44c7f297a863b4e69
…F19-F27

Round 3: da2ce7's APPROVED review 5893913692 (F19-F24, reviewer labels
F15-F20) and copilot-pull-request-reviewer's review 5894073993 (F25-F27,
reviewer labels F19-F21).

- Added the skill-link marker (F19).
- Cited the first commit by subject instead of id, and corrected the
  Ownership note's reply-count attribution (F20).
- Recaptured V5 on torrust-runner-01 with a fresh, internally-consistent
  listing: 34 containers, 0 exited, elision counts that add up (F21, F26).
- Corrected the V1 patch's second hunk header and the `cp` location prose
  (F22).
- Recorded the real V5 capture time throughout, and the PR torrust#2857 merge
  (F23, F27).
- Ran `linter all`, checked the criterion, and added the audit record to
  the PR description's Files touched list (F24).
- Reclassified F18 as RE_RAISE_OF:F13 (F25).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@josecelano

Copy link
Copy Markdown
Member

ACK 45ce675

@josecelano
josecelano requested a balanced review from Copilot November 13, 2026 22:35
da2ce7
da2ce7 previously approved these changes Nov 13, 2026

@da2ce7 da2ce7 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed at 45ce67585e1438e9de1793ef7e5dcfefd20b0a18. Recomputed from the bytes at this head, against the merge base ec1f58ec9; git merge-tree against develop 24230dd01 (now carrying the merge of #2857) merges cleanly. The dictionary addition both sides make collapses to one line, and the merged dictionary stays C-sorted and unique.

Process: one new commit fast-forwards the last reviewed head. Run offline against the captured threads, the audit validator's logic passes on all 27 rows. All 27 threads have a reply and an audit row, and all are resolved.

The change against its claim: the commit does what its message lists. F15, F16, F17 and F20 are resolved. F18 is resolved against the pre-fix script: the header now reads -37,3 +37,4 and the prose places the copy correctly. The V5 recapture adds up (3 + 29 + 2 = 34, matching wc -l and the inspect loop), and every "Up" duration matches the recorded 22:18:22 capture time. F19 is resolved for both last-updated-utc fields, but the 14:00 entry it named still stands (F22).

Consistency: with #2857 merged, the script on develop changed, so the spec's "line 39" and V1's recipe no longer match the merged tree (F21). Every table keeps its column count.

Hygiene: six commits with Conventional subjects, author equals committer, each with one attribution footer line (no rule in the tree on it); the description carries one attribution footer line too. git diff --check is clean, and the closing-keyword pattern matches nothing. The commit-id check prints only the round-1 fix commit's id, in the mapping the skill asks for.

Findings

  • F21 Minor: the line references and the V1 recipe describe the pre-fix script without naming it.
  • F22 Minor: the 14:00 entry's count of 31 is contradicted by the recapture, and its time is still too early.
  • F23 Nit: the audit's F20 places the correcting reply on the wrong thread, and rows F25-F27 say "(inferred)".
  • F24 Nit: the 22:18 entry cites the automated reviewer's labels and omits half the commit.

Checked, no finding: V5 arithmetic, uptimes and identification; the patch against the pre-fix script; audit rows, review ids, severities and reply URLs; the description's file list; the merge; whitespace; commit ids; closing keywords.

Checks

On the loop's compute node at this head, against the merge base ec1f58ec9 (receipt server-gates-kranich-847): the repository's pre-commit gate and lint roster exit 0; the frontmatter check reports the same 15 errors and 4 warnings at this head as on develop, so the PR adds none; the repository's audit validator on pr-2856-review exits 0 (27 rows, 3 log entries, no failures). The PR changes documentation only, so no package tests apply. F21 checked against the bytes at posting: on develop 24230dd01 the script's exit-status test line is replaced by a case block, while ISSUE.md:48 still cites the test line as "line 39". Read on the forge: all 27 review threads are answered and resolved. GitHub checks at this head at posting time: "Docs Lint: completed/success". At posting, develop is 24230dd01.

@da2ce7

da2ce7 commented Nov 13, 2026

Copy link
Copy Markdown
Contributor

ACK 45ce675 — spec, evidence and audit record recomputed from the bytes at this head, with the audit validator's logic passing on all 27 rows and a clean trial merge into develop

…F28-F31

Round 4: da2ce7's APPROVED review 5899089435 (F28-F31, reviewer labels
F21-F24).

- Named the pre-fix script by its durable develop commit id ec1f58e
  instead of a cp of the now-fixed working tree or an unqualified line
  number (F28).
- Corrected the round-2 progress-log entry's container count (31 to 32)
  and timestamp, noting the original was wrong (F29).
- Posted the F14 correction on F14's own thread instead of F16's, and
  removed the incorrect "(inferred)" tag from F25-F27 (F30).
- Rewrote the round-3 progress-log entry to cite audit IDs instead of the
  automated reviewer's own labels, and to list all of that commit's
  fixes (F31).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

The verification instructions omit the pre-fix checkout needed to reproduce the recorded failure, and the completed issue remains incorrectly marked as planned in the open backlog.

2 open issues
3 resolved since last review

Review effort: Balanced

da2ce7
da2ce7 previously approved these changes Nov 13, 2026

@da2ce7 da2ce7 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed at 7eb06c598bcbf13305edd8fa85ff593f9149e115. Recomputed from the bytes at this head, against the merge base ec1f58ec9; git merge-tree against develop 24230dd01 merges cleanly.

Process: one new commit fast-forwards the last reviewed head. Run offline against the captured threads, the audit validator's logic passes on all 31 rows. The automated reviewer opened two threads at 22:53:21Z (r4569586176 and r4569586233), after this head's audit commit (22:49:10Z); neither has an audit row yet (F29). A gap left only by a review posted after the head's last audit commit does not hold this round's verdict.

The change against its claim: the commit does what its message lists, and F21 to F24 are resolved. V1 now starts from git show ec1f58ec9:..., and both of the patch's hunks match that script exactly. Both "line 39" references name ec1f58ec9. The earlier entry now says 32 containers, stamped 15:20, inside the window the uptimes allow. A correcting reply now sits on the F14 thread. The "(inferred)" tags are gone, and the 22:18 entry cites audit IDs.

Consistency: with every task and acceptance criterion done and #2857 merged under Closes #2855, the spec still says status: planned (F28). Every table keeps its column count.

Hygiene: seven commits with Conventional subjects, author equals committer, each with one attribution footer line (no rule in the tree on it); the description carries one attribution footer line too. git diff --check is clean, and the closing-keyword pattern matches nothing. The commit-id check prints only the round-1 fix commit's id, in the mapping the skill asks for.

Findings

  • F28 Minor: status: planned no longer matches the recorded state.
  • F29 Minor: two automated-review threads have no reply and no audit row.
  • F30 Nit: the audit's F29 concern swaps which count matched the listing, and the 15:20 entry points at F28 as well as F29.
  • F31 Nit: git show <rev>:<path> works from any directory, so the PROJECT_ROOT reasoning needs "run from the repository root".

Checked, no finding: the patch against ec1f58ec9, the line references, the corrected count and stamp, the F14 reply, audit rows, ids, severities and reply URLs, the merge, whitespace, commit ids, closing keywords.

Checks

On the loop's compute node at this head, against the merge base ec1f58ec9 (receipt server-gates-kranich-851): the repository's pre-commit gate and lint roster exit 0; the frontmatter check reports the same 15 errors and 4 warnings at this head as on develop, so the PR adds none; the repository's audit validator on pr-2856-review exits 0 (31 rows, 4 log entries, no failures). The PR changes documentation only, so no package tests apply. F28 checked against the bytes at posting: ISSUE.md still reads status: planned, while #2857 is merged into develop with Closes #2855. Read on the forge: the 31 recorded threads are answered and resolved; the two automated-review threads opened at 22:53:21Z, after this head's audit commit, have replies and await their rows (F29). GitHub checks at this head at posting time: "". At posting, develop is 24230dd01.

@da2ce7

da2ce7 commented Nov 13, 2026

Copy link
Copy Markdown
Contributor

ACK 7eb06c5 — spec, evidence and audit record recomputed from the bytes at this head, with the audit validator's logic passing on all 31 rows and a clean trial merge into develop

josecelano-bot and others added 2 commits November 13, 2026 22:59
Round 5: copilot-pull-request-reviewer's review 5899193311 (F32-F33,
reviewer label F28 for both), submitted against the round-3 head before
round 4's fix was pushed.

- Moved the issue folder from docs/issues/open/ to docs/issues/closed/
  now that PR torrust#2857 merged and closed torrust#2855; set status: done, and
  updated spec-path and the evidence file's issue-spec reference (F32).
- F33 duplicates round 4's F28 (pin V1 to the pre-fix script), already
  fixed before this review landed; no further action needed.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…indings F34-F37

Round 6: da2ce7's APPROVED review 5899245168 (F34-F37, reviewer labels
F28-F31), submitted against the round-4 head, before round 5's archive
fix was pushed.

- F34 was already resolved by round 5's F32 fix (archiving the spec).
- F35 (claimed F32/F33 had no replies) declined: both had replies and
  audit rows before this review was submitted, a snapshot-timing
  artifact, not a defect.
- Corrected F29's swapped count claim, its stray F28-F29 cross-reference,
  and a timestamp-format break in the round-2 progress-log entry (F36).
- Added "run from the repository root" to V1's setup prose, with the
  reason (F37).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

@da2ce7 da2ce7 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed at ad44cae5e0f8fc98ae742c2fef1d95a0f84a5b67. Recomputed from the bytes at this head, against the merge base ec1f58ec9; git merge-tree against develop 24230dd01 merges cleanly.

Process: two new commits fast-forward the last reviewed head. Run offline against the captured threads, the audit validator's logic passes on all 37 rows, and all 37 threads have a reply, a row and a resolution. The closing-keyword scan of the branch's commit messages matches closed #2855 in the archive commit. The open-pull-request skill forbids that in a PR that does not close the issue, and says such a message cannot be fixed after the merge (F32).

The change against its claim: both commits do what their messages list. The spec and the evidence move to docs/issues/closed/ with status: done, a matching spec-path and issue-spec, and tracked related artifacts. No open/ path to them remains outside historical text. F28, F30 and F31 are resolved. F29's gap is closed, because rows F32 and F33 now exist. The spec closes, though, without its completion review (F33).

Consistency: the description still lists the two moved files under open/ (F34). Every table keeps its column count.

Hygiene: nine commits with Conventional subjects, author equals committer, each with one attribution footer line (no rule in the tree on it); the description carries one attribution footer line too. git diff --check is clean, and the description and title match no closing keyword. The commit-id check prints only the round-1 fix commit's id, in the mapping the skill asks for.

Findings

  • F32 Major: the archive commit's message carries closed #2855.
  • F33 Minor: the spec is archived as done with its completion review unrecorded.
  • F34 Minor: the description lists the moved files at paths that will never exist on develop.
  • F35 Nit: the audit's F35 says the rows predated the review, but they landed 15 s after it.
  • F36 Nit: last-updated-utc and the progress log stop at 22:55, before the last commit's edits.

Checked, no finding: the move and its frontmatter, the old-path search, the F29 count wording, the 15:20 entry's form, the V1 repository-root note, audit rows, ids, severities and reply URLs, the merge, whitespace, commit ids.

Checks

On the loop's compute node at this head, against the merge base ec1f58ec9 (receipt server-gates-kranich-853): the repository's pre-commit gate and lint roster exit 0; the frontmatter check reports the same 15 errors and 4 warnings at this head as on develop, so the PR adds none; the repository's audit validator on pr-2856-review exits 0 (37 rows, 6 log entries, no failures). The PR changes documentation only, so no package tests apply. F32 checked against the bytes at posting: the body of the archive commit reads "now that PR #2857 merged and closed #2855". Read on the forge: all 37 review threads are answered and resolved. GitHub checks at this head at posting time: "". At posting, develop is 24230dd01.

- 2026-11-13 19:44 UTC - Claude Code (Claude Sonnet 5.5) - PR #2857 merged into `develop`; updated T3/AC1 wording and the Impact paragraph's container count in this spec to match
- 2026-11-13 22:18 UTC - Claude Code (Claude Sonnet 5.5) - Addressed PR #2856 round-3 review findings F19-F27 (audit IDs; `da2ce7`'s APPROVED review contributed F19-F24, the automated reviewer's F25-F27): added the audit record's skill-link marker; cited a commit by its Conventional Commit subject instead of an id and corrected the Ownership note's reply-count attribution; re-ran V5 on the runner with a fresh, internally-consistent capture (34 containers, 0 exited, same oldest leftover) and recorded its real capture time, resolving the stale-timestamp and elided-count inconsistencies; corrected the V1 patch's second hunk header and its `cp`-location prose; ran `linter all` and checked the criterion, and added the audit record to the PR description's Files touched list; reclassified F18 as `RE_RAISE_OF:F13` - `manual-verification-evidence.md` V1, V5; `docs/pr-reviews/pr-2856-review/PR-REVIEW.md`
- 2026-11-13 22:45 UTC - Claude Code (Claude Sonnet 5.5) - Addressed PR #2856 round-4 review findings F28-F31: named the pre-fix script by its durable `develop` commit id `ec1f58ec9` instead of a `cp` of the now-fixed working tree or an unqualified line number; corrected the round-2 progress-log entry's container count (31 to 32) and timestamp; posted the F14 correction on F14's own thread instead of F16's, and removed an incorrect "(inferred)" tag from F25-F27; rewrote the round-3 progress-log entry to cite audit IDs instead of the automated reviewer's own labels - `manual-verification-evidence.md` V1; `docs/pr-reviews/pr-2856-review/PR-REVIEW.md`
- 2026-11-13 22:55 UTC - Claude Code (Claude Sonnet 5.5) - Addressed PR #2856 round-5 Copilot review finding (archive the completed issue): PR #2857 merged and closed #2855 at 19:44 UTC, so this spec and its evidence file moved from `docs/issues/open/` to `docs/issues/closed/`, with `status: done`, `spec-path`, and the evidence file's `issue-spec` reference updated to the new location. The review's other new finding ("pin V1 to the pre-fix script") was already resolved by the round-4 F28 fix.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[Major][F32] The archive commit's message says "now that PR #2857 merged and closed #2855". This is about a commit message, not the diff; it is anchored at the entry that repeats the phrase, where it is harmless.

The open-pull-request skill's pattern (lines 210-222), run over the folded messages, matches closed #2855 in docs(issues): [#2855] archive the completed issue specification. The skill forbids a closing keyword followed by an issue reference in any commit message of a PR that must not close that issue, and line 224 says such a message cannot be fixed after the merge. The branch's messages land on develop too. #2855 is presumably closed already, but a reopening before this merge would be closed again by it. Reword the message before the merge, under the history rules, for example "now that PR #2857 has merged and issue #2855 is closed". The subject stays the same, so the audit's resolution references still resolve.

- [x] Automatic verification completed (`linter all`, relevant tests, and any pre-push checks)
- [x] Manual verification scenarios executed and recorded in issue-local `manual-verification-evidence.md`
- [x] Acceptance criteria reviewed after implementation and updated with evidence
- [ ] Evidence-based implementation completion review recorded: issue-local retrospective created for material discoveries, or progress log states why none was needed

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[Minor][F33] The spec is archived as done, but this checkpoint is open and line 201 still says "Retrospective: Not yet assessed".

The create-issue skill (Verification Requirements, item 5) requires an evidence-based completion review before an issue is treated as complete. That means either an implementation-retrospective.md or a progress-log line saying why none is needed. Separately, checkpoint 141 is checked while acceptance criterion line 166 ("re-reviewed after implementation") is not. Record the completion review and align the two.

priority: p1
epic: null
github-issue: 2855
spec-path: docs/issues/closed/2855-container-regression-timeout-sigint/ISSUE.md

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[Minor][F34] The PR description's "Files touched" still lists docs/issues/open/2855-container-regression-timeout-sigint/ISSUE.md and its evidence file. This is about the description, not the diff; it is anchored at the spec-path it should match.

The PR now adds both files under docs/issues/closed/, so the listed paths will never exist on develop, and the merge tool copies the description into the merge commit. List the closed/ paths.

- Reviewer finding ID: F29
- Source URL: https://github.com/torrust/torrust-tracker/pull/2856#discussion_r4569627114
- Concern: Stated that the threads underlying F32 and F33 had no reply and no audit row.
- Solution: No action: both had replies (r4569614794 at 22:57:37 UTC, r4569615703 at 22:57:45 UTC) and audit rows (F32, F33) before this review was submitted (22:59:25 UTC); the reviewer's view of the PR was evidently taken from a snapshot slightly before those replies posted.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[Nit][F35] The replies predated the review (22:57:37 and 22:57:45, against 22:59:25), but the rows did not. Rows F32 and F33 first appear in the archive commit, committed at 22:59:40, and the reviewed head had neither. The round-6 commit message repeats the claim. State the timeline as it was: replies before the review, rows 15 s after it, in the archive commit. The disposition could then be FIXED by that commit rather than NO_ACTION.

spec-path: docs/issues/closed/2855-container-regression-timeout-sigint/ISSUE.md
branch: "2855-container-regression-timeout-sigint-spec"
related-pr: 2857
last-updated-utc: "2026-11-13 22:55"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[Nit][F36] This field and the evidence file's both say 22:55. The round-6 commit (23:06:29) edited both files, changing the 15:20 entry's form and adding the V1 repository-root note. The progress log has no entry for those edits, while the audit's Processing Log records them at 23:05. Advance both stamps and add the matching entry.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants