Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
57 changes: 52 additions & 5 deletions .github/skills/dev/planning/cleanup-completed-issues/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
---
name: cleanup-completed-issues
description: Guide for archiving closed issue specification files from docs/issues/open/ to docs/issues/closed/. Covers verifying closure on GitHub, moving files, updating frontmatter, creating a branch, and opening a PR. Permanent deletion of closed specs is not automated — the user must explicitly request it. Use when cleaning up closed issue specs, archiving issue docs, or maintaining the docs/issues/ folder. Triggers on "cleanup issue", "archive issue", "move closed issue", "clean completed issues", or "maintain issue docs".
description: Guide for archiving closed issue specification files from docs/issues/open/ to docs/issues/closed/. Covers verifying closure on GitHub, moving files, updating frontmatter, auditing and repairing affected documentation links, creating a branch, and opening a PR. Permanent deletion of closed specs is not automated — the user must explicitly request it. Use when cleaning up closed issue specs, archiving issue docs, or maintaining the docs/issues/ folder. Triggers on "cleanup issue", "archive issue", "move closed issue", "clean completed issues", or "maintain issue docs".
metadata:
author: torrust
version: "1.5"
version: "1.6"
---

# Cleaning Up Completed Issues
Expand Down Expand Up @@ -161,15 +161,62 @@ reflect completed work (manual verification, acceptance criteria review, etc.) b
on the actual content of the spec body. Add a progress log entry documenting the
archival action.

### Step 4: Update Any Parent Epic Spec
### Step 4: Audit and Repair Documentation References (Mandatory)

An archive move invalidates every live reference to the old `docs/issues/open/...` path.
After updating the moved documents' own frontmatter, search the repository for each old path
and update all **current** documentation links and references to the new `docs/issues/closed/...`
location. This includes:

- parent EPIC subissue tables and their frontmatter `semantic-links`;
- active issue specs that name the archived issue as a prerequisite, dependency, or related
artifact;
- ADR frontmatter and body links; and
- frontmatter in moved supplementary artifacts (`evidence.md`, manual-verification records,
and similar documents) that references the moved primary spec.

When modifying an affected document that has YAML frontmatter, keep its metadata current:

- preserve its existing `status` unless its actual lifecycle state changed;
- update any changed `spec-path` or `semantic-links.related-artifacts` value; and
- set `last-updated-utc` to the current date when that field exists.

Do not rewrite immutable historical records (for example, past PR review summaries) merely
because they accurately record the path that existed at the time. Update them only when they
function as a live navigational reference.

For each archived issue, search for the old path before finishing. For a single-file spec:

```bash
rg 'docs/issues/open/42-add-peer-expiry-grace-period\.md' \
--glob '!target/**' --glob '!storage/**'
```

For a folder spec, search its folder prefix:

```bash
rg 'docs/issues/open/42-my-subissue-folder' \
--glob '!target/**' --glob '!storage/**'
```

The remaining results must be either corrected or deliberately retained historical records.

### Step 5: Update Any Parent Epic Spec

If the closed issue was a subissue of an EPIC, update the epic's spec to reflect the
new `docs/issues/closed/` path and `DONE` status in its subissue table.

Example: if `docs/issues/open/EPIC.md` has a table row referencing a subissue at
`docs/issues/open/...` with `TODO` status, update both the path and status after archiving.

### Step 5: Commit
The parent EPIC is also an affected document under Step 4: update its frontmatter
`semantic-links` and `last-updated-utc` when applicable.

### Step 6: Validate and Commit

Before committing, confirm that every changed Markdown frontmatter block is valid YAML and that
each archived primary issue spec has `status: done`, a `spec-path` below `docs/issues/closed/`,
and a current `last-updated-utc`. Also run `git diff --check` after staging.
Comment thread
josecelano marked this conversation as resolved.
Outdated

```bash
# Single issue
Expand All @@ -185,7 +232,7 @@ Run the pre-commit hooks before finishing:
./contrib/dev-tools/git/hooks/pre-commit.sh
```

### Step 6: Push and Open a Pull Request
### Step 7: Push and Open a Pull Request

```bash
FORK_REMOTE="${FORK_REMOTE:-josecelano}"
Expand Down
2 changes: 1 addition & 1 deletion docs/adrs/20260727000000_events_are_objective_facts.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
semantic-links:
related-artifacts:
- docs/adrs/index.md
- docs/issues/open/1136-1978-configurable-udp-connection-id-validation-policy.md
- docs/issues/closed/1136-1978-configurable-udp-connection-id-validation-policy.md
- packages/udp-core/src/event.rs
- packages/udp-server/src/event.rs
- packages/http-core/src/event.rs
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ semantic-links:
- create-adr
related-artifacts:
- docs/issues/open/1419-allow-multiple-integration-tests-at-main-app-level/ISSUE.md
- docs/issues/open/2036-add-runtime-service-registry-metadata/ISSUE.md
- docs/issues/closed/2036-add-runtime-service-registry-metadata/ISSUE.md
- src/container.rs
- tests/common/mod.rs
- packages/axum-health-check-api-server/src/handlers.rs
Expand Down
Original file line number Diff line number Diff line change
@@ -1,19 +1,19 @@
---
doc-type: issue
issue-type: enhancement
status: in_progress
status: done
priority: p2
github-issue: 1136
spec-path: docs/issues/open/1136-1978-configurable-udp-connection-id-validation-policy.md
spec-path: docs/issues/closed/1136-1978-configurable-udp-connection-id-validation-policy.md
branch: "1136-connection-id-validation-policy"
related-pr: 2002
last-updated-utc: 2026-07-27 12:36
last-updated-utc: 2026-08-17
semantic-links:
skill-links:
- create-issue
related-artifacts:
- docs/issues/open/1978-configuration-overhaul-epic/EPIC.md
- docs/issues/open/1453-1978-ip-bans-reset-interval-configurable/ISSUE.md
- docs/issues/closed/1453-1978-ip-bans-reset-interval-configurable/ISSUE.md
- docs/adrs/20260727000000_events_are_objective_facts.md
- packages/configuration/src/v3_0_0/udp_tracker_server.rs
- packages/udp-core/src/connection_cookie.rs
Expand Down Expand Up @@ -230,7 +230,7 @@ Status values: `TODO`, `IN_PROGRESS`, `BLOCKED`, `DONE`.
- [ ] Acceptance criteria reviewed after implementation and updated with evidence
- [ ] Reviewer validated acceptance criteria and updated checkboxes
- [x] Committer verified spec progress is up to date before commit
- [ ] Issue closed and spec moved from `docs/issues/open/` to `docs/issues/closed/`
- [x] Issue closed and spec moved from `docs/issues/open/` to `docs/issues/closed/`

### Progress Log

Expand Down Expand Up @@ -267,6 +267,7 @@ Status values: `TODO`, `IN_PROGRESS`, `BLOCKED`, `DONE`.
`UdpTracker` to global `UdpTrackerServer` after discovering that the shared `BanService`
architecture makes a per-instance policy inconsistent. Added ADR-20260727180000 documenting
the shared-services design. All code, tests, and docs updated to reflect the global config.
- 2026-08-17 UTC - GitHub Copilot - Archived the specification after GitHub issue #1136 was closed and implementation PR #2032 merged.

## Acceptance Criteria

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@ issue-type: enhancement
status: done
priority: p2
github-issue: 1415
spec-path: docs/issues/open/1415-1978-use-service-binding-instead-of-socket-addr/ISSUE.md
spec-path: docs/issues/closed/1415-1978-use-service-binding-instead-of-socket-addr/ISSUE.md
branch: "1415-use-service-binding"
related-pr: null
last-updated-utc: 2026-07-22 16:10
last-updated-utc: 2026-08-17
semantic-links:
skill-links:
- create-issue
Expand Down Expand Up @@ -112,7 +112,7 @@ The exact commands and complete relevant outputs are recorded in
- [x] Automatic verification completed (`linter all`, relevant tests)
- [x] Post-implementation manual verification executed and recorded
- [x] Acceptance criteria reviewed after implementation
- [ ] Issue closed and specification moved to `docs/issues/closed/`
- [x] Issue closed and specification moved to `docs/issues/closed/`

### Progress Log

Expand Down Expand Up @@ -145,6 +145,7 @@ The exact commands and complete relevant outputs are recorded in
`server_socket_addr` is derived from `ServiceBinding::bind_address()`. Both fields therefore
report the same actual bound address, including an OS-assigned port when configuration uses
port `0`.
- 2026-08-17 UTC - GitHub Copilot - Archived the specification after GitHub issue #1415 was closed and implementation PR #2025 merged.

## Acceptance Criteria

Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,11 @@
---
spec-path: docs/issues/closed/1415-1978-use-service-binding-instead-of-socket-addr/manual-verification.md
last-updated-utc: 2026-08-17
semantic-links:
related-artifacts:
- docs/issues/closed/1415-1978-use-service-binding-instead-of-socket-addr/ISSUE.md
---

# Manual Verification Evidence - Issue #1415

This file preserves reproducible manual-verification evidence before and after the implementation
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
---
doc-type: issue
issue-type: enhancement
status: in_review
status: done
priority: p2
github-issue: 1453
spec-path: docs/issues/open/1453-1978-ip-bans-reset-interval-configurable/ISSUE.md
spec-path: docs/issues/closed/1453-1978-ip-bans-reset-interval-configurable/ISSUE.md
branch: "1453-ip-bans-reset-interval"
related-pr: null
last-updated-utc: 2026-07-24 15:59
last-updated-utc: 2026-08-17
semantic-links:
skill-links:
- create-issue
Expand All @@ -16,7 +16,7 @@ semantic-links:
- packages/configuration/src/v3_0_0/types.rs
- docs/adrs/20260723184019_separate_configuration_value_invariants_from_consistency_validation.md
- docs/application-jobs.md
- docs/issues/open/1453-1978-ip-bans-reset-interval-configurable/evidence/
- docs/issues/closed/1453-1978-ip-bans-reset-interval-configurable/evidence/
- packages/udp-core/src/services/banning.rs
- packages/udp-server/src/server/launcher.rs
- src/bootstrap/jobs/
Expand Down Expand Up @@ -125,7 +125,7 @@ Since all UDP servers are launched simultaneously at startup, the bans are being
- [x] Automatic verification completed (`linter all`, formatting, and focused tests)
- [x] Manual verification scenarios executed and recorded
- [x] Acceptance criteria reviewed after implementation
- [ ] Issue closed and spec moved to `docs/issues/open/`
- [x] Issue closed and spec moved to `docs/issues/closed/`

### Progress Log

Expand Down Expand Up @@ -159,6 +159,7 @@ Since all UDP servers are launched simultaneously at startup, the bans are being
- 2026-07-24 15:59 UTC - agent - Recorded M2 manual runtime evidence in
[`evidence/2026-07-24-manual-runtime-verification.md`](evidence/2026-07-24-manual-runtime-verification.md).
Two UDP listeners started locally and produced one cleanup-job start log entry.
- 2026-08-17 UTC - GitHub Copilot - Archived the specification after GitHub issue #1453 was closed and implementation PR #2029 merged.

## Acceptance Criteria

Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
---
spec-path: docs/issues/closed/1453-1978-ip-bans-reset-interval-configurable/evidence/2026-07-24-manual-runtime-verification.md
last-updated-utc: 2026-08-17
semantic-links:
skill-links:
- run-tracker-locally
related-artifacts:
- issue #1453
- docs/issues/open/1453-1978-ip-bans-reset-interval-configurable/ISSUE.md
- docs/issues/closed/1453-1978-ip-bans-reset-interval-configurable/ISSUE.md
- src/app.rs
- src/bootstrap/jobs/udp_tracker_server.rs
- packages/udp-server/src/server/launcher.rs
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
---
doc-type: issue
issue-type: enhancement
status: open
status: done
priority: p2
github-issue: 2019
spec-path: docs/issues/open/2019-automatically-format-project-dictionary/ISSUE.md
spec-path: docs/issues/closed/2019-automatically-format-project-dictionary/ISSUE.md
branch: "2019-automatically-format-project-dictionary"
related-pr: 2020
last-updated-utc: 2026-07-22 00:00
last-updated-utc: 2026-08-17
semantic-links:
skill-links:
- create-issue
Expand Down Expand Up @@ -76,7 +76,7 @@ Status values: `TODO`, `IN_PROGRESS`, `BLOCKED`, `DONE`.
- [x] Acceptance criteria reviewed after implementation and updated with evidence
- [ ] Reviewer validated acceptance criteria and updated checkboxes
- [ ] Committer verified spec progress is up to date before commit
- [ ] Issue closed and spec moved from `docs/issues/open/` to `docs/issues/closed/`
- [x] Issue closed and spec moved from `docs/issues/open/` to `docs/issues/closed/`

### Progress Log

Expand All @@ -90,6 +90,7 @@ Append one line per meaningful update.
- 2026-07-22 00:00 UTC - GitHub Copilot - Verified `TORRUST_GIT_HOOKS_LOG_DIR=.tmp ./contrib/dev-tools/git/hooks/pre-push.sh --format=json`; all nightly checks, documentation build, and stable workspace tests passed
- 2026-07-22 00:00 UTC - GitHub Copilot - Re-reviewed the acceptance criteria against the implementation and recorded the existing verification evidence
- 2026-07-22 00:00 UTC - GitHub Copilot - Moved the specification into the documented issue-folder layout after review feedback
- 2026-08-17 UTC - GitHub Copilot - Archived the specification after GitHub issue #2019 was closed and implementation PR #2020 merged.

## Acceptance Criteria

Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
---
doc-type: issue
issue-type: task
status: open
status: done
priority: p2
github-issue: 2022
spec-path: docs/issues/open/2022-vendor-and-document-maintainer-merge-workflow/ISSUE.md
spec-path: docs/issues/closed/2022-vendor-and-document-maintainer-merge-workflow/ISSUE.md
branch: "2022-vendor-and-document-maintainer-merge-workflow"
related-pr: null
last-updated-utc: 2026-07-22 15:30
last-updated-utc: 2026-08-17
semantic-links:
skill-links:
- create-issue
Expand All @@ -17,7 +17,7 @@ semantic-links:
- .github/skills/dev/git-workflow/merge-pull-request/SKILL.md
- contrib/dev-tools/git/
- cspell.json
- docs/issues/open/2022-vendor-and-document-maintainer-merge-workflow/github-merge.py
- docs/issues/closed/2022-vendor-and-document-maintainer-merge-workflow/github-merge.py
- docs/issues/open/2003-overhaul-guardrails-and-automation/EPIC.md
- project-words.txt
---
Expand Down Expand Up @@ -90,7 +90,7 @@ Status values: `TODO`, `IN_PROGRESS`, `BLOCKED`, `DONE`.
- [ ] Acceptance criteria reviewed after implementation and updated with evidence
- [ ] Reviewer validated acceptance criteria and updated checkboxes
- [ ] Committer verified spec progress is up to date before commit
- [ ] Issue closed and spec moved from `docs/issues/open/` to `docs/issues/closed/`
- [x] Issue closed and spec moved from `docs/issues/open/` to `docs/issues/closed/`

### Progress Log

Expand All @@ -100,6 +100,7 @@ Append one line per meaningful update.
- 2026-07-22 13:00 UTC - GitHub Copilot - User approved the specification; created GitHub issue #2022 with the `task`, `Documentation`, and `Automation` labels - `https://github.com/torrust/torrust-tracker/issues/2022`
- 2026-07-22 15:30 UTC - GitHub Copilot - Corrected reviewed specification wording and added the MIT license text referenced by the immutable planning snapshot - PR #2024
- 2026-07-23 00:00 UTC - GitHub Copilot - Verified the planning snapshot and external source against the recorded SHA-256, then vendored the byte-identical MIT-licensed tool with a repository-local wrapper, deterministic dry-run coverage, and maintainer merge skill - implementation branch `2022-vendor-and-document-maintainer-merge-workflow`
- 2026-08-17 UTC - GitHub Copilot - Archived the specification after GitHub issue #2022 was closed and implementation PR #2027 merged.

## Acceptance Criteria

Expand Down Expand Up @@ -171,7 +172,7 @@ Notes:
- Related issues: #2003, #2022
- Related PRs: #2020
- External source before vendoring: `/home/josecelano/Bin/github-merge.py`
- Current source snapshot: `docs/issues/open/2022-vendor-and-document-maintainer-merge-workflow/github-merge.py` (SHA-256 `e390eb014131f3183a2cba642134974a6b09b19a65322d17dd7c81cf4ffbaad2`)
- Current source snapshot: `docs/issues/closed/2022-vendor-and-document-maintainer-merge-workflow/github-merge.py` (SHA-256 `e390eb014131f3183a2cba642134974a6b09b19a65322d17dd7c81cf4ffbaad2`)
- `cspell.json`
- `contrib/dev-tools/git/hooks/pre-commit.sh`
- `contrib/dev-tools/git/format-project-words.sh`
Expand Down
Original file line number Diff line number Diff line change
@@ -1,21 +1,21 @@
---
doc-type: issue
issue-type: enhancement
status: open
status: done
priority: p1
github-issue: 2036
spec-path: docs/issues/open/2036-add-runtime-service-registry-metadata/ISSUE.md
spec-path: docs/issues/closed/2036-add-runtime-service-registry-metadata/ISSUE.md
branch: 2036-add-runtime-service-registry-metadata
related-pr: null
last-updated-utc: 2026-07-29 16:15
last-updated-utc: 2026-08-17
semantic-links:
skill-links:
- write-unit-test
related-artifacts:
- docs/adrs/20260728115400_define_registar_as_runtime_service_registry.md
- docs/issues/open/1419-allow-multiple-integration-tests-at-main-app-level/ISSUE.md
- docs/issues/open/2035-fix-duplicate-port-zero-tracker-instance-bootstrap/ISSUE.md
- docs/issues/open/2041-migrate-runtime-service-registry-metadata/ISSUE.md
- docs/issues/closed/2041-migrate-runtime-service-registry-metadata/ISSUE.md
- packages/axum-http-server/src/server.rs
- packages/axum-rest-api-server/src/server.rs
- packages/primitives/src/configuration_instance_id.rs
Expand Down Expand Up @@ -100,8 +100,8 @@ in [#2041](../2041-migrate-runtime-service-registry-metadata/ISSUE.md), which de
- [x] GitHub issue created: #2036
- [x] Implementation completed
- [x] Automatic verification completed (`linter all`, relevant tests)
- [ ] Acceptance criteria reviewed after implementation
- [ ] Issue closed and specification moved to `docs/issues/closed/`
- [x] Acceptance criteria reviewed after implementation
- [x] Issue closed and specification moved to `docs/issues/closed/`

### Progress Log

Expand All @@ -116,6 +116,7 @@ in [#2041](../2041-migrate-runtime-service-registry-metadata/ISSUE.md), which de
- 2026-07-29 16:28 UTC - agent - Replaced the HTTP, REST API, and UDP health-check
`TYPE_STRING` values with their corresponding `ServiceRole` identifiers. The REST API canonical
string is `tracker_rest_api` to preserve its existing health-check response value.
- 2026-08-17 UTC - GitHub Copilot - Archived the specification after GitHub issue #2036 was closed and implementation PR #2042 merged.

## Acceptance Criteria

Expand Down
Loading
Loading