From a133ba54b63bc2f0237372b91489d28afecc5de1 Mon Sep 17 00:00:00 2001 From: Pieter Viljoen Date: Fri, 9 Oct 2026 10:12:16 -0700 Subject: [PATCH 01/13] State When an Issue Belongs in a Platform Handoff Lane session-handoff "The Chain" now states that a platform lane holds only work whose defect reproduces, or whose fix can be verified, solely on that platform, that the Linux-verifiable half of a mixed issue goes to the ordinary backlog, and that a platform lane holding no qualifying issue is closed out with no successor. Co-Authored-By: Claude Opus 5.5 --- .agents/skills/session-handoff/SKILL.md | 13 +++++++++++++ .../fleet-skills/.source-digests/session-handoff | 2 +- .../fleet-skills/skills/session-handoff/SKILL.md | 13 +++++++++++++ .github/skills/session-handoff/SKILL.md | 13 +++++++++++++ 4 files changed, 40 insertions(+), 1 deletion(-) diff --git a/.agents/skills/session-handoff/SKILL.md b/.agents/skills/session-handoff/SKILL.md index b84ad5f50..9b767622a 100644 --- a/.agents/skills/session-handoff/SKILL.md +++ b/.agents/skills/session-handoff/SKILL.md @@ -62,6 +62,19 @@ without trusting the parts of it that have gone stale. - **One open handoff issue per track per repository.** A track is a short kebab-case slug naming a lane of work, and a session that names no track uses `default`. Parallel lanes each name their own, so each closes its own predecessor and neither reads the other's state as current. +- **A platform lane holds only work that needs its platform.** A track kept for one platform, such + as `windows` or `wsl`, takes an issue only when its defect reproduces, or its fix can be + verified, solely on that platform. A defect in WSL interop, the `WSLInterop` binfmt handler, + `/mnt/` paths, `wslpath`, or running a Windows `.exe` from Linux needs WSL. Behavior that + differs under Windows PowerShell 5.1 or `winget`, or in Windows path and ACL semantics, needs + Windows. Anything a Linux host verifies needs neither, systemd user scopes, apt, and the bash + loaders included, and neither does a PowerShell script whose logic runs under `pwsh` in a Linux + container, unless its defect depends on Windows itself. Such an issue goes to the ordinary + backlog, since a lane costs a separate chain and a host-bound session. An issue with a half a + Linux host can do goes to the backlog, and only its platform-only half, filed as an issue of its + own, enters the lane. A platform lane holding no qualifying issue is closed out with no + successor, its last link carrying the outcome as a comment, as `AGENTS.md` "Session Scope" + closes a track whose work is complete. - **The title is for humans**, shaped `Session Handoff []: `, which `new` composes from the track and the subject it is given, so what a session writes is the subject alone. Nothing parses the title, so a maintainer is free to rename one. diff --git a/.claude-plugin/fleet-skills/.source-digests/session-handoff b/.claude-plugin/fleet-skills/.source-digests/session-handoff index 6d54cf547..01c358a02 100644 --- a/.claude-plugin/fleet-skills/.source-digests/session-handoff +++ b/.claude-plugin/fleet-skills/.source-digests/session-handoff @@ -1 +1 @@ -71ea890bf0050608 +25291f8a45f696c4 diff --git a/.claude-plugin/fleet-skills/skills/session-handoff/SKILL.md b/.claude-plugin/fleet-skills/skills/session-handoff/SKILL.md index b84ad5f50..9b767622a 100644 --- a/.claude-plugin/fleet-skills/skills/session-handoff/SKILL.md +++ b/.claude-plugin/fleet-skills/skills/session-handoff/SKILL.md @@ -62,6 +62,19 @@ without trusting the parts of it that have gone stale. - **One open handoff issue per track per repository.** A track is a short kebab-case slug naming a lane of work, and a session that names no track uses `default`. Parallel lanes each name their own, so each closes its own predecessor and neither reads the other's state as current. +- **A platform lane holds only work that needs its platform.** A track kept for one platform, such + as `windows` or `wsl`, takes an issue only when its defect reproduces, or its fix can be + verified, solely on that platform. A defect in WSL interop, the `WSLInterop` binfmt handler, + `/mnt/` paths, `wslpath`, or running a Windows `.exe` from Linux needs WSL. Behavior that + differs under Windows PowerShell 5.1 or `winget`, or in Windows path and ACL semantics, needs + Windows. Anything a Linux host verifies needs neither, systemd user scopes, apt, and the bash + loaders included, and neither does a PowerShell script whose logic runs under `pwsh` in a Linux + container, unless its defect depends on Windows itself. Such an issue goes to the ordinary + backlog, since a lane costs a separate chain and a host-bound session. An issue with a half a + Linux host can do goes to the backlog, and only its platform-only half, filed as an issue of its + own, enters the lane. A platform lane holding no qualifying issue is closed out with no + successor, its last link carrying the outcome as a comment, as `AGENTS.md` "Session Scope" + closes a track whose work is complete. - **The title is for humans**, shaped `Session Handoff []: `, which `new` composes from the track and the subject it is given, so what a session writes is the subject alone. Nothing parses the title, so a maintainer is free to rename one. diff --git a/.github/skills/session-handoff/SKILL.md b/.github/skills/session-handoff/SKILL.md index b84ad5f50..9b767622a 100644 --- a/.github/skills/session-handoff/SKILL.md +++ b/.github/skills/session-handoff/SKILL.md @@ -62,6 +62,19 @@ without trusting the parts of it that have gone stale. - **One open handoff issue per track per repository.** A track is a short kebab-case slug naming a lane of work, and a session that names no track uses `default`. Parallel lanes each name their own, so each closes its own predecessor and neither reads the other's state as current. +- **A platform lane holds only work that needs its platform.** A track kept for one platform, such + as `windows` or `wsl`, takes an issue only when its defect reproduces, or its fix can be + verified, solely on that platform. A defect in WSL interop, the `WSLInterop` binfmt handler, + `/mnt/` paths, `wslpath`, or running a Windows `.exe` from Linux needs WSL. Behavior that + differs under Windows PowerShell 5.1 or `winget`, or in Windows path and ACL semantics, needs + Windows. Anything a Linux host verifies needs neither, systemd user scopes, apt, and the bash + loaders included, and neither does a PowerShell script whose logic runs under `pwsh` in a Linux + container, unless its defect depends on Windows itself. Such an issue goes to the ordinary + backlog, since a lane costs a separate chain and a host-bound session. An issue with a half a + Linux host can do goes to the backlog, and only its platform-only half, filed as an issue of its + own, enters the lane. A platform lane holding no qualifying issue is closed out with no + successor, its last link carrying the outcome as a comment, as `AGENTS.md` "Session Scope" + closes a track whose work is complete. - **The title is for humans**, shaped `Session Handoff []: `, which `new` composes from the track and the subject it is given, so what a session writes is the subject alone. Nothing parses the title, so a maintainer is free to rename one. From 670a128f6bcefd3377757bbd976d8ee0018c100f Mon Sep 17 00:00:00 2001 From: Pieter Viljoen Date: Fri, 9 Oct 2026 10:15:45 -0700 Subject: [PATCH 02/13] Tighten the Platform Lane Test Make the test whether a Linux host can both fix and verify the issue, narrow a mixed issue to its Linux half when its platform half is split out, and drop the hub-only loader example. Co-Authored-By: Claude Opus 5.5 --- .agents/skills/session-handoff/SKILL.md | 23 +++++++++---------- .../.source-digests/session-handoff | 2 +- .../skills/session-handoff/SKILL.md | 23 +++++++++---------- .github/skills/session-handoff/SKILL.md | 23 +++++++++---------- 4 files changed, 34 insertions(+), 37 deletions(-) diff --git a/.agents/skills/session-handoff/SKILL.md b/.agents/skills/session-handoff/SKILL.md index 9b767622a..3bff95756 100644 --- a/.agents/skills/session-handoff/SKILL.md +++ b/.agents/skills/session-handoff/SKILL.md @@ -63,18 +63,17 @@ without trusting the parts of it that have gone stale. lane of work, and a session that names no track uses `default`. Parallel lanes each name their own, so each closes its own predecessor and neither reads the other's state as current. - **A platform lane holds only work that needs its platform.** A track kept for one platform, such - as `windows` or `wsl`, takes an issue only when its defect reproduces, or its fix can be - verified, solely on that platform. A defect in WSL interop, the `WSLInterop` binfmt handler, - `/mnt/` paths, `wslpath`, or running a Windows `.exe` from Linux needs WSL. Behavior that - differs under Windows PowerShell 5.1 or `winget`, or in Windows path and ACL semantics, needs - Windows. Anything a Linux host verifies needs neither, systemd user scopes, apt, and the bash - loaders included, and neither does a PowerShell script whose logic runs under `pwsh` in a Linux - container, unless its defect depends on Windows itself. Such an issue goes to the ordinary - backlog, since a lane costs a separate chain and a host-bound session. An issue with a half a - Linux host can do goes to the backlog, and only its platform-only half, filed as an issue of its - own, enters the lane. A platform lane holding no qualifying issue is closed out with no - successor, its last link carrying the outcome as a comment, as `AGENTS.md` "Session Scope" - closes a track whose work is complete. + as `wsl`, holds an issue only when no Linux host can both fix it and verify the fix. + A defect in WSL interop, the `WSLInterop` binfmt handler, `/mnt/` paths, or `wslpath` + needs WSL, and so does running a Windows `.exe` from Linux. Behavior that differs under Windows + PowerShell 5.1 or `winget` needs Windows, and so do Windows path and ACL semantics. Systemd user + scopes, apt, and a bash script need neither. Nor does a PowerShell script whose logic runs under + `pwsh` in a Linux container, unless its defect depends on Windows itself. An issue a Linux host + can fix and verify goes to the ordinary backlog, since a lane costs a separate chain and a + host-bound session. Where only part of an issue needs the platform, that part is filed as an + issue of its own for the lane. The original is narrowed to the rest and stays in the backlog. A + platform lane holding no qualifying issue is closed out with no successor. Its last link carries + the outcome as a comment, as `AGENTS.md` "Session Scope" closes a track whose work is complete. - **The title is for humans**, shaped `Session Handoff []: `, which `new` composes from the track and the subject it is given, so what a session writes is the subject alone. Nothing parses the title, so a maintainer is free to rename one. diff --git a/.claude-plugin/fleet-skills/.source-digests/session-handoff b/.claude-plugin/fleet-skills/.source-digests/session-handoff index 01c358a02..50ee942f8 100644 --- a/.claude-plugin/fleet-skills/.source-digests/session-handoff +++ b/.claude-plugin/fleet-skills/.source-digests/session-handoff @@ -1 +1 @@ -25291f8a45f696c4 +80af4ff0db5259de diff --git a/.claude-plugin/fleet-skills/skills/session-handoff/SKILL.md b/.claude-plugin/fleet-skills/skills/session-handoff/SKILL.md index 9b767622a..3bff95756 100644 --- a/.claude-plugin/fleet-skills/skills/session-handoff/SKILL.md +++ b/.claude-plugin/fleet-skills/skills/session-handoff/SKILL.md @@ -63,18 +63,17 @@ without trusting the parts of it that have gone stale. lane of work, and a session that names no track uses `default`. Parallel lanes each name their own, so each closes its own predecessor and neither reads the other's state as current. - **A platform lane holds only work that needs its platform.** A track kept for one platform, such - as `windows` or `wsl`, takes an issue only when its defect reproduces, or its fix can be - verified, solely on that platform. A defect in WSL interop, the `WSLInterop` binfmt handler, - `/mnt/` paths, `wslpath`, or running a Windows `.exe` from Linux needs WSL. Behavior that - differs under Windows PowerShell 5.1 or `winget`, or in Windows path and ACL semantics, needs - Windows. Anything a Linux host verifies needs neither, systemd user scopes, apt, and the bash - loaders included, and neither does a PowerShell script whose logic runs under `pwsh` in a Linux - container, unless its defect depends on Windows itself. Such an issue goes to the ordinary - backlog, since a lane costs a separate chain and a host-bound session. An issue with a half a - Linux host can do goes to the backlog, and only its platform-only half, filed as an issue of its - own, enters the lane. A platform lane holding no qualifying issue is closed out with no - successor, its last link carrying the outcome as a comment, as `AGENTS.md` "Session Scope" - closes a track whose work is complete. + as `wsl`, holds an issue only when no Linux host can both fix it and verify the fix. + A defect in WSL interop, the `WSLInterop` binfmt handler, `/mnt/` paths, or `wslpath` + needs WSL, and so does running a Windows `.exe` from Linux. Behavior that differs under Windows + PowerShell 5.1 or `winget` needs Windows, and so do Windows path and ACL semantics. Systemd user + scopes, apt, and a bash script need neither. Nor does a PowerShell script whose logic runs under + `pwsh` in a Linux container, unless its defect depends on Windows itself. An issue a Linux host + can fix and verify goes to the ordinary backlog, since a lane costs a separate chain and a + host-bound session. Where only part of an issue needs the platform, that part is filed as an + issue of its own for the lane. The original is narrowed to the rest and stays in the backlog. A + platform lane holding no qualifying issue is closed out with no successor. Its last link carries + the outcome as a comment, as `AGENTS.md` "Session Scope" closes a track whose work is complete. - **The title is for humans**, shaped `Session Handoff []: `, which `new` composes from the track and the subject it is given, so what a session writes is the subject alone. Nothing parses the title, so a maintainer is free to rename one. diff --git a/.github/skills/session-handoff/SKILL.md b/.github/skills/session-handoff/SKILL.md index 9b767622a..3bff95756 100644 --- a/.github/skills/session-handoff/SKILL.md +++ b/.github/skills/session-handoff/SKILL.md @@ -63,18 +63,17 @@ without trusting the parts of it that have gone stale. lane of work, and a session that names no track uses `default`. Parallel lanes each name their own, so each closes its own predecessor and neither reads the other's state as current. - **A platform lane holds only work that needs its platform.** A track kept for one platform, such - as `windows` or `wsl`, takes an issue only when its defect reproduces, or its fix can be - verified, solely on that platform. A defect in WSL interop, the `WSLInterop` binfmt handler, - `/mnt/` paths, `wslpath`, or running a Windows `.exe` from Linux needs WSL. Behavior that - differs under Windows PowerShell 5.1 or `winget`, or in Windows path and ACL semantics, needs - Windows. Anything a Linux host verifies needs neither, systemd user scopes, apt, and the bash - loaders included, and neither does a PowerShell script whose logic runs under `pwsh` in a Linux - container, unless its defect depends on Windows itself. Such an issue goes to the ordinary - backlog, since a lane costs a separate chain and a host-bound session. An issue with a half a - Linux host can do goes to the backlog, and only its platform-only half, filed as an issue of its - own, enters the lane. A platform lane holding no qualifying issue is closed out with no - successor, its last link carrying the outcome as a comment, as `AGENTS.md` "Session Scope" - closes a track whose work is complete. + as `wsl`, holds an issue only when no Linux host can both fix it and verify the fix. + A defect in WSL interop, the `WSLInterop` binfmt handler, `/mnt/` paths, or `wslpath` + needs WSL, and so does running a Windows `.exe` from Linux. Behavior that differs under Windows + PowerShell 5.1 or `winget` needs Windows, and so do Windows path and ACL semantics. Systemd user + scopes, apt, and a bash script need neither. Nor does a PowerShell script whose logic runs under + `pwsh` in a Linux container, unless its defect depends on Windows itself. An issue a Linux host + can fix and verify goes to the ordinary backlog, since a lane costs a separate chain and a + host-bound session. Where only part of an issue needs the platform, that part is filed as an + issue of its own for the lane. The original is narrowed to the rest and stays in the backlog. A + platform lane holding no qualifying issue is closed out with no successor. Its last link carries + the outcome as a comment, as `AGENTS.md` "Session Scope" closes a track whose work is complete. - **The title is for humans**, shaped `Session Handoff []: `, which `new` composes from the track and the subject it is given, so what a session writes is the subject alone. Nothing parses the title, so a maintainer is free to rename one. From b3ccd27f2a952d7f1233e78da31f28b14cba97a3 Mon Sep 17 00:00:00 2001 From: Pieter Viljoen Date: Fri, 9 Oct 2026 10:18:30 -0700 Subject: [PATCH 03/13] Exclude WSL From the Linux Host the Platform Test Names A WSL distro is a Linux host, so the test now names a Linux host outside WSL, and a bash or pwsh script needs a lane only where its defect depends on WSL or Windows itself. Co-Authored-By: Claude Opus 5.5 --- .agents/skills/session-handoff/SKILL.md | 24 +++++++++---------- .../.source-digests/session-handoff | 2 +- .../skills/session-handoff/SKILL.md | 24 +++++++++---------- .github/skills/session-handoff/SKILL.md | 24 +++++++++---------- 4 files changed, 37 insertions(+), 37 deletions(-) diff --git a/.agents/skills/session-handoff/SKILL.md b/.agents/skills/session-handoff/SKILL.md index 3bff95756..43012d931 100644 --- a/.agents/skills/session-handoff/SKILL.md +++ b/.agents/skills/session-handoff/SKILL.md @@ -62,18 +62,18 @@ without trusting the parts of it that have gone stale. - **One open handoff issue per track per repository.** A track is a short kebab-case slug naming a lane of work, and a session that names no track uses `default`. Parallel lanes each name their own, so each closes its own predecessor and neither reads the other's state as current. -- **A platform lane holds only work that needs its platform.** A track kept for one platform, such - as `wsl`, holds an issue only when no Linux host can both fix it and verify the fix. - A defect in WSL interop, the `WSLInterop` binfmt handler, `/mnt/` paths, or `wslpath` - needs WSL, and so does running a Windows `.exe` from Linux. Behavior that differs under Windows - PowerShell 5.1 or `winget` needs Windows, and so do Windows path and ACL semantics. Systemd user - scopes, apt, and a bash script need neither. Nor does a PowerShell script whose logic runs under - `pwsh` in a Linux container, unless its defect depends on Windows itself. An issue a Linux host - can fix and verify goes to the ordinary backlog, since a lane costs a separate chain and a - host-bound session. Where only part of an issue needs the platform, that part is filed as an - issue of its own for the lane. The original is narrowed to the rest and stays in the backlog. A - platform lane holding no qualifying issue is closed out with no successor. Its last link carries - the outcome as a comment, as `AGENTS.md` "Session Scope" closes a track whose work is complete. +- **A platform lane holds only work that needs its platform.** A platform track, such as `wsl`, + holds an issue only when no Linux host outside WSL can both fix and verify it. A defect in WSL + interop, the `WSLInterop` binfmt handler, `/mnt/` paths, or `wslpath` needs WSL, and so + does running a Windows `.exe` from Linux. Behavior that differs under Windows PowerShell 5.1 or + `winget` needs Windows, and so do Windows path and ACL semantics. Systemd user scopes and apt + need neither. A bash script, or a `pwsh` script run in a Linux container, needs a lane only where + its defect depends on WSL or Windows itself. An issue a Linux host outside WSL can fix and verify + goes to the backlog, a lane costing a separate chain and a host-bound session. Where + only part of an issue needs the platform, that part is filed as an issue of its own for the lane. + The original is narrowed to the rest and stays in the backlog. A platform lane holding no + qualifying issue is closed out with no successor. Its last link carries the outcome as a comment, + as `AGENTS.md` "Session Scope" closes a track whose work is complete. - **The title is for humans**, shaped `Session Handoff []: `, which `new` composes from the track and the subject it is given, so what a session writes is the subject alone. Nothing parses the title, so a maintainer is free to rename one. diff --git a/.claude-plugin/fleet-skills/.source-digests/session-handoff b/.claude-plugin/fleet-skills/.source-digests/session-handoff index 50ee942f8..3fae263b0 100644 --- a/.claude-plugin/fleet-skills/.source-digests/session-handoff +++ b/.claude-plugin/fleet-skills/.source-digests/session-handoff @@ -1 +1 @@ -80af4ff0db5259de +4c0cfc26d0f11f52 diff --git a/.claude-plugin/fleet-skills/skills/session-handoff/SKILL.md b/.claude-plugin/fleet-skills/skills/session-handoff/SKILL.md index 3bff95756..43012d931 100644 --- a/.claude-plugin/fleet-skills/skills/session-handoff/SKILL.md +++ b/.claude-plugin/fleet-skills/skills/session-handoff/SKILL.md @@ -62,18 +62,18 @@ without trusting the parts of it that have gone stale. - **One open handoff issue per track per repository.** A track is a short kebab-case slug naming a lane of work, and a session that names no track uses `default`. Parallel lanes each name their own, so each closes its own predecessor and neither reads the other's state as current. -- **A platform lane holds only work that needs its platform.** A track kept for one platform, such - as `wsl`, holds an issue only when no Linux host can both fix it and verify the fix. - A defect in WSL interop, the `WSLInterop` binfmt handler, `/mnt/` paths, or `wslpath` - needs WSL, and so does running a Windows `.exe` from Linux. Behavior that differs under Windows - PowerShell 5.1 or `winget` needs Windows, and so do Windows path and ACL semantics. Systemd user - scopes, apt, and a bash script need neither. Nor does a PowerShell script whose logic runs under - `pwsh` in a Linux container, unless its defect depends on Windows itself. An issue a Linux host - can fix and verify goes to the ordinary backlog, since a lane costs a separate chain and a - host-bound session. Where only part of an issue needs the platform, that part is filed as an - issue of its own for the lane. The original is narrowed to the rest and stays in the backlog. A - platform lane holding no qualifying issue is closed out with no successor. Its last link carries - the outcome as a comment, as `AGENTS.md` "Session Scope" closes a track whose work is complete. +- **A platform lane holds only work that needs its platform.** A platform track, such as `wsl`, + holds an issue only when no Linux host outside WSL can both fix and verify it. A defect in WSL + interop, the `WSLInterop` binfmt handler, `/mnt/` paths, or `wslpath` needs WSL, and so + does running a Windows `.exe` from Linux. Behavior that differs under Windows PowerShell 5.1 or + `winget` needs Windows, and so do Windows path and ACL semantics. Systemd user scopes and apt + need neither. A bash script, or a `pwsh` script run in a Linux container, needs a lane only where + its defect depends on WSL or Windows itself. An issue a Linux host outside WSL can fix and verify + goes to the backlog, a lane costing a separate chain and a host-bound session. Where + only part of an issue needs the platform, that part is filed as an issue of its own for the lane. + The original is narrowed to the rest and stays in the backlog. A platform lane holding no + qualifying issue is closed out with no successor. Its last link carries the outcome as a comment, + as `AGENTS.md` "Session Scope" closes a track whose work is complete. - **The title is for humans**, shaped `Session Handoff []: `, which `new` composes from the track and the subject it is given, so what a session writes is the subject alone. Nothing parses the title, so a maintainer is free to rename one. diff --git a/.github/skills/session-handoff/SKILL.md b/.github/skills/session-handoff/SKILL.md index 3bff95756..43012d931 100644 --- a/.github/skills/session-handoff/SKILL.md +++ b/.github/skills/session-handoff/SKILL.md @@ -62,18 +62,18 @@ without trusting the parts of it that have gone stale. - **One open handoff issue per track per repository.** A track is a short kebab-case slug naming a lane of work, and a session that names no track uses `default`. Parallel lanes each name their own, so each closes its own predecessor and neither reads the other's state as current. -- **A platform lane holds only work that needs its platform.** A track kept for one platform, such - as `wsl`, holds an issue only when no Linux host can both fix it and verify the fix. - A defect in WSL interop, the `WSLInterop` binfmt handler, `/mnt/` paths, or `wslpath` - needs WSL, and so does running a Windows `.exe` from Linux. Behavior that differs under Windows - PowerShell 5.1 or `winget` needs Windows, and so do Windows path and ACL semantics. Systemd user - scopes, apt, and a bash script need neither. Nor does a PowerShell script whose logic runs under - `pwsh` in a Linux container, unless its defect depends on Windows itself. An issue a Linux host - can fix and verify goes to the ordinary backlog, since a lane costs a separate chain and a - host-bound session. Where only part of an issue needs the platform, that part is filed as an - issue of its own for the lane. The original is narrowed to the rest and stays in the backlog. A - platform lane holding no qualifying issue is closed out with no successor. Its last link carries - the outcome as a comment, as `AGENTS.md` "Session Scope" closes a track whose work is complete. +- **A platform lane holds only work that needs its platform.** A platform track, such as `wsl`, + holds an issue only when no Linux host outside WSL can both fix and verify it. A defect in WSL + interop, the `WSLInterop` binfmt handler, `/mnt/` paths, or `wslpath` needs WSL, and so + does running a Windows `.exe` from Linux. Behavior that differs under Windows PowerShell 5.1 or + `winget` needs Windows, and so do Windows path and ACL semantics. Systemd user scopes and apt + need neither. A bash script, or a `pwsh` script run in a Linux container, needs a lane only where + its defect depends on WSL or Windows itself. An issue a Linux host outside WSL can fix and verify + goes to the backlog, a lane costing a separate chain and a host-bound session. Where + only part of an issue needs the platform, that part is filed as an issue of its own for the lane. + The original is narrowed to the rest and stays in the backlog. A platform lane holding no + qualifying issue is closed out with no successor. Its last link carries the outcome as a comment, + as `AGENTS.md` "Session Scope" closes a track whose work is complete. - **The title is for humans**, shaped `Session Handoff []: `, which `new` composes from the track and the subject it is given, so what a session writes is the subject alone. Nothing parses the title, so a maintainer is free to rename one. From 2a18487e24effbb79d5af8bb3e88020e17c420f7 Mon Sep 17 00:00:00 2001 From: Pieter Viljoen Date: Fri, 9 Oct 2026 10:21:42 -0700 Subject: [PATCH 04/13] Make the Platform Lane Test Per Platform Each platform track now holds only issues that need its own platform, systemd and apt take the same WSL or Windows exception as a script, and the lane-cost clause names the platform lane rather than the backlog. Co-Authored-By: Claude Opus 5.5 --- .agents/skills/session-handoff/SKILL.md | 25 ++++++++++--------- .../.source-digests/session-handoff | 2 +- .../skills/session-handoff/SKILL.md | 25 ++++++++++--------- .github/skills/session-handoff/SKILL.md | 25 ++++++++++--------- 4 files changed, 40 insertions(+), 37 deletions(-) diff --git a/.agents/skills/session-handoff/SKILL.md b/.agents/skills/session-handoff/SKILL.md index 43012d931..9b7052cc3 100644 --- a/.agents/skills/session-handoff/SKILL.md +++ b/.agents/skills/session-handoff/SKILL.md @@ -62,18 +62,19 @@ without trusting the parts of it that have gone stale. - **One open handoff issue per track per repository.** A track is a short kebab-case slug naming a lane of work, and a session that names no track uses `default`. Parallel lanes each name their own, so each closes its own predecessor and neither reads the other's state as current. -- **A platform lane holds only work that needs its platform.** A platform track, such as `wsl`, - holds an issue only when no Linux host outside WSL can both fix and verify it. A defect in WSL - interop, the `WSLInterop` binfmt handler, `/mnt/` paths, or `wslpath` needs WSL, and so - does running a Windows `.exe` from Linux. Behavior that differs under Windows PowerShell 5.1 or - `winget` needs Windows, and so do Windows path and ACL semantics. Systemd user scopes and apt - need neither. A bash script, or a `pwsh` script run in a Linux container, needs a lane only where - its defect depends on WSL or Windows itself. An issue a Linux host outside WSL can fix and verify - goes to the backlog, a lane costing a separate chain and a host-bound session. Where - only part of an issue needs the platform, that part is filed as an issue of its own for the lane. - The original is narrowed to the rest and stays in the backlog. A platform lane holding no - qualifying issue is closed out with no successor. Its last link carries the outcome as a comment, - as `AGENTS.md` "Session Scope" closes a track whose work is complete. +- **A platform lane holds only work that needs its platform.** A platform track, such as `wsl` or + `windows`, holds only issues that need its platform. An issue needs a platform when no host + lacking it can both fix the issue and verify the fix. A defect in WSL interop, the `WSLInterop` + binfmt handler, `/mnt/` paths, or `wslpath` needs WSL, and so does running a Windows + `.exe` from Linux. Behavior that differs under Windows PowerShell 5.1 or `winget` needs Windows, + and so do Windows path and ACL semantics. Systemd user scopes, apt, a bash script, and a `pwsh` + script run in a Linux container all run on a Linux host. Each needs a lane only where its defect + depends on WSL or Windows itself. Any issue no platform lane holds goes to the ordinary backlog, + since a platform lane costs a separate chain and a host-bound session. Where only part of an + issue needs a platform, that part is filed as an issue of its own for the lane. The original is + narrowed to the rest and stays in the backlog. A platform lane holding no qualifying issue is + closed out with no successor. Its last link carries the outcome as a comment, as `AGENTS.md` + "Session Scope" closes a track whose work is complete. - **The title is for humans**, shaped `Session Handoff []: `, which `new` composes from the track and the subject it is given, so what a session writes is the subject alone. Nothing parses the title, so a maintainer is free to rename one. diff --git a/.claude-plugin/fleet-skills/.source-digests/session-handoff b/.claude-plugin/fleet-skills/.source-digests/session-handoff index 3fae263b0..e338fab81 100644 --- a/.claude-plugin/fleet-skills/.source-digests/session-handoff +++ b/.claude-plugin/fleet-skills/.source-digests/session-handoff @@ -1 +1 @@ -4c0cfc26d0f11f52 +18efe23ce2ae6429 diff --git a/.claude-plugin/fleet-skills/skills/session-handoff/SKILL.md b/.claude-plugin/fleet-skills/skills/session-handoff/SKILL.md index 43012d931..9b7052cc3 100644 --- a/.claude-plugin/fleet-skills/skills/session-handoff/SKILL.md +++ b/.claude-plugin/fleet-skills/skills/session-handoff/SKILL.md @@ -62,18 +62,19 @@ without trusting the parts of it that have gone stale. - **One open handoff issue per track per repository.** A track is a short kebab-case slug naming a lane of work, and a session that names no track uses `default`. Parallel lanes each name their own, so each closes its own predecessor and neither reads the other's state as current. -- **A platform lane holds only work that needs its platform.** A platform track, such as `wsl`, - holds an issue only when no Linux host outside WSL can both fix and verify it. A defect in WSL - interop, the `WSLInterop` binfmt handler, `/mnt/` paths, or `wslpath` needs WSL, and so - does running a Windows `.exe` from Linux. Behavior that differs under Windows PowerShell 5.1 or - `winget` needs Windows, and so do Windows path and ACL semantics. Systemd user scopes and apt - need neither. A bash script, or a `pwsh` script run in a Linux container, needs a lane only where - its defect depends on WSL or Windows itself. An issue a Linux host outside WSL can fix and verify - goes to the backlog, a lane costing a separate chain and a host-bound session. Where - only part of an issue needs the platform, that part is filed as an issue of its own for the lane. - The original is narrowed to the rest and stays in the backlog. A platform lane holding no - qualifying issue is closed out with no successor. Its last link carries the outcome as a comment, - as `AGENTS.md` "Session Scope" closes a track whose work is complete. +- **A platform lane holds only work that needs its platform.** A platform track, such as `wsl` or + `windows`, holds only issues that need its platform. An issue needs a platform when no host + lacking it can both fix the issue and verify the fix. A defect in WSL interop, the `WSLInterop` + binfmt handler, `/mnt/` paths, or `wslpath` needs WSL, and so does running a Windows + `.exe` from Linux. Behavior that differs under Windows PowerShell 5.1 or `winget` needs Windows, + and so do Windows path and ACL semantics. Systemd user scopes, apt, a bash script, and a `pwsh` + script run in a Linux container all run on a Linux host. Each needs a lane only where its defect + depends on WSL or Windows itself. Any issue no platform lane holds goes to the ordinary backlog, + since a platform lane costs a separate chain and a host-bound session. Where only part of an + issue needs a platform, that part is filed as an issue of its own for the lane. The original is + narrowed to the rest and stays in the backlog. A platform lane holding no qualifying issue is + closed out with no successor. Its last link carries the outcome as a comment, as `AGENTS.md` + "Session Scope" closes a track whose work is complete. - **The title is for humans**, shaped `Session Handoff []: `, which `new` composes from the track and the subject it is given, so what a session writes is the subject alone. Nothing parses the title, so a maintainer is free to rename one. diff --git a/.github/skills/session-handoff/SKILL.md b/.github/skills/session-handoff/SKILL.md index 43012d931..9b7052cc3 100644 --- a/.github/skills/session-handoff/SKILL.md +++ b/.github/skills/session-handoff/SKILL.md @@ -62,18 +62,19 @@ without trusting the parts of it that have gone stale. - **One open handoff issue per track per repository.** A track is a short kebab-case slug naming a lane of work, and a session that names no track uses `default`. Parallel lanes each name their own, so each closes its own predecessor and neither reads the other's state as current. -- **A platform lane holds only work that needs its platform.** A platform track, such as `wsl`, - holds an issue only when no Linux host outside WSL can both fix and verify it. A defect in WSL - interop, the `WSLInterop` binfmt handler, `/mnt/` paths, or `wslpath` needs WSL, and so - does running a Windows `.exe` from Linux. Behavior that differs under Windows PowerShell 5.1 or - `winget` needs Windows, and so do Windows path and ACL semantics. Systemd user scopes and apt - need neither. A bash script, or a `pwsh` script run in a Linux container, needs a lane only where - its defect depends on WSL or Windows itself. An issue a Linux host outside WSL can fix and verify - goes to the backlog, a lane costing a separate chain and a host-bound session. Where - only part of an issue needs the platform, that part is filed as an issue of its own for the lane. - The original is narrowed to the rest and stays in the backlog. A platform lane holding no - qualifying issue is closed out with no successor. Its last link carries the outcome as a comment, - as `AGENTS.md` "Session Scope" closes a track whose work is complete. +- **A platform lane holds only work that needs its platform.** A platform track, such as `wsl` or + `windows`, holds only issues that need its platform. An issue needs a platform when no host + lacking it can both fix the issue and verify the fix. A defect in WSL interop, the `WSLInterop` + binfmt handler, `/mnt/` paths, or `wslpath` needs WSL, and so does running a Windows + `.exe` from Linux. Behavior that differs under Windows PowerShell 5.1 or `winget` needs Windows, + and so do Windows path and ACL semantics. Systemd user scopes, apt, a bash script, and a `pwsh` + script run in a Linux container all run on a Linux host. Each needs a lane only where its defect + depends on WSL or Windows itself. Any issue no platform lane holds goes to the ordinary backlog, + since a platform lane costs a separate chain and a host-bound session. Where only part of an + issue needs a platform, that part is filed as an issue of its own for the lane. The original is + narrowed to the rest and stays in the backlog. A platform lane holding no qualifying issue is + closed out with no successor. Its last link carries the outcome as a comment, as `AGENTS.md` + "Session Scope" closes a track whose work is complete. - **The title is for humans**, shaped `Session Handoff []: `, which `new` composes from the track and the subject it is given, so what a session writes is the subject alone. Nothing parses the title, so a maintainer is free to rename one. From eefcf89712dc470e5ac3b9ae47e5a3a33308b2aa Mon Sep 17 00:00:00 2001 From: Pieter Viljoen Date: Fri, 9 Oct 2026 10:25:17 -0700 Subject: [PATCH 05/13] Route Platform Issues by the Test Rather Than by Lane Membership An issue that needs a platform goes to that platform's lane, a mixed issue's platform parts each go to their own lane, and a lane closes out once its next steps name no issue that needs its platform. Co-Authored-By: Claude Opus 5.5 --- .agents/skills/session-handoff/SKILL.md | 17 +++++++++-------- .../.source-digests/session-handoff | 2 +- .../skills/session-handoff/SKILL.md | 17 +++++++++-------- .github/skills/session-handoff/SKILL.md | 17 +++++++++-------- 4 files changed, 28 insertions(+), 25 deletions(-) diff --git a/.agents/skills/session-handoff/SKILL.md b/.agents/skills/session-handoff/SKILL.md index 9b7052cc3..5d1c82b41 100644 --- a/.agents/skills/session-handoff/SKILL.md +++ b/.agents/skills/session-handoff/SKILL.md @@ -62,19 +62,20 @@ without trusting the parts of it that have gone stale. - **One open handoff issue per track per repository.** A track is a short kebab-case slug naming a lane of work, and a session that names no track uses `default`. Parallel lanes each name their own, so each closes its own predecessor and neither reads the other's state as current. -- **A platform lane holds only work that needs its platform.** A platform track, such as `wsl` or - `windows`, holds only issues that need its platform. An issue needs a platform when no host +- **A platform lane is for work that needs its platform.** A platform track, such as `wsl` or + `windows`, takes only issues that need its platform. An issue needs a platform when no host lacking it can both fix the issue and verify the fix. A defect in WSL interop, the `WSLInterop` binfmt handler, `/mnt/` paths, or `wslpath` needs WSL, and so does running a Windows `.exe` from Linux. Behavior that differs under Windows PowerShell 5.1 or `winget` needs Windows, and so do Windows path and ACL semantics. Systemd user scopes, apt, a bash script, and a `pwsh` script run in a Linux container all run on a Linux host. Each needs a lane only where its defect - depends on WSL or Windows itself. Any issue no platform lane holds goes to the ordinary backlog, - since a platform lane costs a separate chain and a host-bound session. Where only part of an - issue needs a platform, that part is filed as an issue of its own for the lane. The original is - narrowed to the rest and stays in the backlog. A platform lane holding no qualifying issue is - closed out with no successor. Its last link carries the outcome as a comment, as `AGENTS.md` - "Session Scope" closes a track whose work is complete. + depends on WSL or Windows itself. An issue that needs a platform goes to that platform's lane. + An issue that needs none goes to the ordinary backlog, since a platform lane costs a separate + chain and a host-bound session. Where only part of an issue needs a platform, each such part is + filed as an issue of its own for its platform's lane. The original is narrowed to the part a + Linux host outside WSL can do and stays in the backlog. A platform lane whose next steps name no + issue that needs its platform is closed out with no successor. Its last link carries the outcome + as a comment, as `AGENTS.md` "Session Scope" closes a track whose work is complete. - **The title is for humans**, shaped `Session Handoff []: `, which `new` composes from the track and the subject it is given, so what a session writes is the subject alone. Nothing parses the title, so a maintainer is free to rename one. diff --git a/.claude-plugin/fleet-skills/.source-digests/session-handoff b/.claude-plugin/fleet-skills/.source-digests/session-handoff index e338fab81..6a8090721 100644 --- a/.claude-plugin/fleet-skills/.source-digests/session-handoff +++ b/.claude-plugin/fleet-skills/.source-digests/session-handoff @@ -1 +1 @@ -18efe23ce2ae6429 +4b4673ae95fe06fa diff --git a/.claude-plugin/fleet-skills/skills/session-handoff/SKILL.md b/.claude-plugin/fleet-skills/skills/session-handoff/SKILL.md index 9b7052cc3..5d1c82b41 100644 --- a/.claude-plugin/fleet-skills/skills/session-handoff/SKILL.md +++ b/.claude-plugin/fleet-skills/skills/session-handoff/SKILL.md @@ -62,19 +62,20 @@ without trusting the parts of it that have gone stale. - **One open handoff issue per track per repository.** A track is a short kebab-case slug naming a lane of work, and a session that names no track uses `default`. Parallel lanes each name their own, so each closes its own predecessor and neither reads the other's state as current. -- **A platform lane holds only work that needs its platform.** A platform track, such as `wsl` or - `windows`, holds only issues that need its platform. An issue needs a platform when no host +- **A platform lane is for work that needs its platform.** A platform track, such as `wsl` or + `windows`, takes only issues that need its platform. An issue needs a platform when no host lacking it can both fix the issue and verify the fix. A defect in WSL interop, the `WSLInterop` binfmt handler, `/mnt/` paths, or `wslpath` needs WSL, and so does running a Windows `.exe` from Linux. Behavior that differs under Windows PowerShell 5.1 or `winget` needs Windows, and so do Windows path and ACL semantics. Systemd user scopes, apt, a bash script, and a `pwsh` script run in a Linux container all run on a Linux host. Each needs a lane only where its defect - depends on WSL or Windows itself. Any issue no platform lane holds goes to the ordinary backlog, - since a platform lane costs a separate chain and a host-bound session. Where only part of an - issue needs a platform, that part is filed as an issue of its own for the lane. The original is - narrowed to the rest and stays in the backlog. A platform lane holding no qualifying issue is - closed out with no successor. Its last link carries the outcome as a comment, as `AGENTS.md` - "Session Scope" closes a track whose work is complete. + depends on WSL or Windows itself. An issue that needs a platform goes to that platform's lane. + An issue that needs none goes to the ordinary backlog, since a platform lane costs a separate + chain and a host-bound session. Where only part of an issue needs a platform, each such part is + filed as an issue of its own for its platform's lane. The original is narrowed to the part a + Linux host outside WSL can do and stays in the backlog. A platform lane whose next steps name no + issue that needs its platform is closed out with no successor. Its last link carries the outcome + as a comment, as `AGENTS.md` "Session Scope" closes a track whose work is complete. - **The title is for humans**, shaped `Session Handoff []: `, which `new` composes from the track and the subject it is given, so what a session writes is the subject alone. Nothing parses the title, so a maintainer is free to rename one. diff --git a/.github/skills/session-handoff/SKILL.md b/.github/skills/session-handoff/SKILL.md index 9b7052cc3..5d1c82b41 100644 --- a/.github/skills/session-handoff/SKILL.md +++ b/.github/skills/session-handoff/SKILL.md @@ -62,19 +62,20 @@ without trusting the parts of it that have gone stale. - **One open handoff issue per track per repository.** A track is a short kebab-case slug naming a lane of work, and a session that names no track uses `default`. Parallel lanes each name their own, so each closes its own predecessor and neither reads the other's state as current. -- **A platform lane holds only work that needs its platform.** A platform track, such as `wsl` or - `windows`, holds only issues that need its platform. An issue needs a platform when no host +- **A platform lane is for work that needs its platform.** A platform track, such as `wsl` or + `windows`, takes only issues that need its platform. An issue needs a platform when no host lacking it can both fix the issue and verify the fix. A defect in WSL interop, the `WSLInterop` binfmt handler, `/mnt/` paths, or `wslpath` needs WSL, and so does running a Windows `.exe` from Linux. Behavior that differs under Windows PowerShell 5.1 or `winget` needs Windows, and so do Windows path and ACL semantics. Systemd user scopes, apt, a bash script, and a `pwsh` script run in a Linux container all run on a Linux host. Each needs a lane only where its defect - depends on WSL or Windows itself. Any issue no platform lane holds goes to the ordinary backlog, - since a platform lane costs a separate chain and a host-bound session. Where only part of an - issue needs a platform, that part is filed as an issue of its own for the lane. The original is - narrowed to the rest and stays in the backlog. A platform lane holding no qualifying issue is - closed out with no successor. Its last link carries the outcome as a comment, as `AGENTS.md` - "Session Scope" closes a track whose work is complete. + depends on WSL or Windows itself. An issue that needs a platform goes to that platform's lane. + An issue that needs none goes to the ordinary backlog, since a platform lane costs a separate + chain and a host-bound session. Where only part of an issue needs a platform, each such part is + filed as an issue of its own for its platform's lane. The original is narrowed to the part a + Linux host outside WSL can do and stays in the backlog. A platform lane whose next steps name no + issue that needs its platform is closed out with no successor. Its last link carries the outcome + as a comment, as `AGENTS.md` "Session Scope" closes a track whose work is complete. - **The title is for humans**, shaped `Session Handoff []: `, which `new` composes from the track and the subject it is given, so what a session writes is the subject alone. Nothing parses the title, so a maintainer is free to rename one. From cb9e6688b4efde80d54f6ea68af509d7d7909844 Mon Sep 17 00:00:00 2001 From: Pieter Viljoen Date: Fri, 9 Oct 2026 10:29:38 -0700 Subject: [PATCH 06/13] Define a Platform by Where the Defect Lives and Keep Lane Work Out of Ranking WSL is where a defect lives inside a distro or its interop, Windows where it lives on Windows itself, a lane closes once none of its next steps needs its platform, a split leaving nothing closes the original, and backlog-burndown no longer ranks an issue that needs a platform. Co-Authored-By: Claude Opus 5.5 --- .agents/skills/backlog-burndown/SKILL.md | 4 +++ .agents/skills/session-handoff/SKILL.md | 28 ++++++++++--------- .../.source-digests/backlog-burndown | 2 +- .../.source-digests/session-handoff | 2 +- .../skills/backlog-burndown/SKILL.md | 4 +++ .../skills/session-handoff/SKILL.md | 28 ++++++++++--------- .github/skills/backlog-burndown/SKILL.md | 4 +++ .github/skills/session-handoff/SKILL.md | 28 ++++++++++--------- 8 files changed, 59 insertions(+), 41 deletions(-) diff --git a/.agents/skills/backlog-burndown/SKILL.md b/.agents/skills/backlog-burndown/SKILL.md index f6dca29f0..3db68ccea 100644 --- a/.agents/skills/backlog-burndown/SKILL.md +++ b/.agents/skills/backlog-burndown/SKILL.md @@ -130,6 +130,10 @@ stands rather than being assumed cleared. The round's report names every issue i and the blocker each one waits on, since the maintainer reads the report rather than the issue bodies, and a stuck issue nobody names reads as ordinary backlog that simply never moves. +An issue that needs a platform, by the test `session-handoff` "The Chain" states, is counted and +is not ranked. It belongs to that platform's lane, which a session on the platform works, so this +run gives it no group, no worker, and no claim. + An issue that asks a question rather than states a defect is not ranked and is never guessed at. It has no group, no worker, and no claim, so nothing in "Raising a Blocked Question" applies to it except how the question travels. It goes to the maintainer at the end of ranking, per diff --git a/.agents/skills/session-handoff/SKILL.md b/.agents/skills/session-handoff/SKILL.md index 5d1c82b41..709463297 100644 --- a/.agents/skills/session-handoff/SKILL.md +++ b/.agents/skills/session-handoff/SKILL.md @@ -63,19 +63,21 @@ without trusting the parts of it that have gone stale. lane of work, and a session that names no track uses `default`. Parallel lanes each name their own, so each closes its own predecessor and neither reads the other's state as current. - **A platform lane is for work that needs its platform.** A platform track, such as `wsl` or - `windows`, takes only issues that need its platform. An issue needs a platform when no host - lacking it can both fix the issue and verify the fix. A defect in WSL interop, the `WSLInterop` - binfmt handler, `/mnt/` paths, or `wslpath` needs WSL, and so does running a Windows - `.exe` from Linux. Behavior that differs under Windows PowerShell 5.1 or `winget` needs Windows, - and so do Windows path and ACL semantics. Systemd user scopes, apt, a bash script, and a `pwsh` - script run in a Linux container all run on a Linux host. Each needs a lane only where its defect - depends on WSL or Windows itself. An issue that needs a platform goes to that platform's lane. - An issue that needs none goes to the ordinary backlog, since a platform lane costs a separate - chain and a host-bound session. Where only part of an issue needs a platform, each such part is - filed as an issue of its own for its platform's lane. The original is narrowed to the part a - Linux host outside WSL can do and stays in the backlog. A platform lane whose next steps name no - issue that needs its platform is closed out with no successor. Its last link carries the outcome - as a comment, as `AGENTS.md` "Session Scope" closes a track whose work is complete. + `windows`, takes only issues that need its platform. An issue needs WSL where its defect lives + inside a WSL distro or in its interop with Windows. It needs Windows where its defect lives on + Windows itself. A Linux host outside WSL can neither reproduce such a defect nor verify + its fix. A defect in the `WSLInterop` binfmt handler, `/mnt/` paths, or `wslpath` needs + WSL, and so does running a Windows `.exe` from Linux. Behavior that differs under Windows + PowerShell 5.1 or `winget` needs Windows, whichever shell started it, and so do Windows path and + ACL semantics. Systemd user scopes, apt, a bash script, and a `pwsh` script run in a Linux + container all run on a Linux host. Each needs a lane only where its defect depends on WSL or + Windows itself. An issue that needs a platform goes to that platform's lane. An issue that needs + none goes to the ordinary backlog, since a platform lane costs a separate chain and a host-bound + session. Where only part of an issue needs a platform, each such part is filed as an issue of its + own for its platform's lane. The original is narrowed to what a Linux host outside WSL can do, or + closed in favor of those issues where nothing is left. A platform lane is closed out with no + successor once none of its next steps needs its platform. Its last link carries the outcome as a + comment, as `AGENTS.md` "Session Scope" closes a track whose work is complete. - **The title is for humans**, shaped `Session Handoff []: `, which `new` composes from the track and the subject it is given, so what a session writes is the subject alone. Nothing parses the title, so a maintainer is free to rename one. diff --git a/.claude-plugin/fleet-skills/.source-digests/backlog-burndown b/.claude-plugin/fleet-skills/.source-digests/backlog-burndown index 17c143684..4f268cbb8 100644 --- a/.claude-plugin/fleet-skills/.source-digests/backlog-burndown +++ b/.claude-plugin/fleet-skills/.source-digests/backlog-burndown @@ -1 +1 @@ -a44167992b6a50fe +afb7270ce0791c8a diff --git a/.claude-plugin/fleet-skills/.source-digests/session-handoff b/.claude-plugin/fleet-skills/.source-digests/session-handoff index 6a8090721..0b0bca03e 100644 --- a/.claude-plugin/fleet-skills/.source-digests/session-handoff +++ b/.claude-plugin/fleet-skills/.source-digests/session-handoff @@ -1 +1 @@ -4b4673ae95fe06fa +000496e74d69bf8d diff --git a/.claude-plugin/fleet-skills/skills/backlog-burndown/SKILL.md b/.claude-plugin/fleet-skills/skills/backlog-burndown/SKILL.md index f6dca29f0..3db68ccea 100644 --- a/.claude-plugin/fleet-skills/skills/backlog-burndown/SKILL.md +++ b/.claude-plugin/fleet-skills/skills/backlog-burndown/SKILL.md @@ -130,6 +130,10 @@ stands rather than being assumed cleared. The round's report names every issue i and the blocker each one waits on, since the maintainer reads the report rather than the issue bodies, and a stuck issue nobody names reads as ordinary backlog that simply never moves. +An issue that needs a platform, by the test `session-handoff` "The Chain" states, is counted and +is not ranked. It belongs to that platform's lane, which a session on the platform works, so this +run gives it no group, no worker, and no claim. + An issue that asks a question rather than states a defect is not ranked and is never guessed at. It has no group, no worker, and no claim, so nothing in "Raising a Blocked Question" applies to it except how the question travels. It goes to the maintainer at the end of ranking, per diff --git a/.claude-plugin/fleet-skills/skills/session-handoff/SKILL.md b/.claude-plugin/fleet-skills/skills/session-handoff/SKILL.md index 5d1c82b41..709463297 100644 --- a/.claude-plugin/fleet-skills/skills/session-handoff/SKILL.md +++ b/.claude-plugin/fleet-skills/skills/session-handoff/SKILL.md @@ -63,19 +63,21 @@ without trusting the parts of it that have gone stale. lane of work, and a session that names no track uses `default`. Parallel lanes each name their own, so each closes its own predecessor and neither reads the other's state as current. - **A platform lane is for work that needs its platform.** A platform track, such as `wsl` or - `windows`, takes only issues that need its platform. An issue needs a platform when no host - lacking it can both fix the issue and verify the fix. A defect in WSL interop, the `WSLInterop` - binfmt handler, `/mnt/` paths, or `wslpath` needs WSL, and so does running a Windows - `.exe` from Linux. Behavior that differs under Windows PowerShell 5.1 or `winget` needs Windows, - and so do Windows path and ACL semantics. Systemd user scopes, apt, a bash script, and a `pwsh` - script run in a Linux container all run on a Linux host. Each needs a lane only where its defect - depends on WSL or Windows itself. An issue that needs a platform goes to that platform's lane. - An issue that needs none goes to the ordinary backlog, since a platform lane costs a separate - chain and a host-bound session. Where only part of an issue needs a platform, each such part is - filed as an issue of its own for its platform's lane. The original is narrowed to the part a - Linux host outside WSL can do and stays in the backlog. A platform lane whose next steps name no - issue that needs its platform is closed out with no successor. Its last link carries the outcome - as a comment, as `AGENTS.md` "Session Scope" closes a track whose work is complete. + `windows`, takes only issues that need its platform. An issue needs WSL where its defect lives + inside a WSL distro or in its interop with Windows. It needs Windows where its defect lives on + Windows itself. A Linux host outside WSL can neither reproduce such a defect nor verify + its fix. A defect in the `WSLInterop` binfmt handler, `/mnt/` paths, or `wslpath` needs + WSL, and so does running a Windows `.exe` from Linux. Behavior that differs under Windows + PowerShell 5.1 or `winget` needs Windows, whichever shell started it, and so do Windows path and + ACL semantics. Systemd user scopes, apt, a bash script, and a `pwsh` script run in a Linux + container all run on a Linux host. Each needs a lane only where its defect depends on WSL or + Windows itself. An issue that needs a platform goes to that platform's lane. An issue that needs + none goes to the ordinary backlog, since a platform lane costs a separate chain and a host-bound + session. Where only part of an issue needs a platform, each such part is filed as an issue of its + own for its platform's lane. The original is narrowed to what a Linux host outside WSL can do, or + closed in favor of those issues where nothing is left. A platform lane is closed out with no + successor once none of its next steps needs its platform. Its last link carries the outcome as a + comment, as `AGENTS.md` "Session Scope" closes a track whose work is complete. - **The title is for humans**, shaped `Session Handoff []: `, which `new` composes from the track and the subject it is given, so what a session writes is the subject alone. Nothing parses the title, so a maintainer is free to rename one. diff --git a/.github/skills/backlog-burndown/SKILL.md b/.github/skills/backlog-burndown/SKILL.md index f6dca29f0..3db68ccea 100644 --- a/.github/skills/backlog-burndown/SKILL.md +++ b/.github/skills/backlog-burndown/SKILL.md @@ -130,6 +130,10 @@ stands rather than being assumed cleared. The round's report names every issue i and the blocker each one waits on, since the maintainer reads the report rather than the issue bodies, and a stuck issue nobody names reads as ordinary backlog that simply never moves. +An issue that needs a platform, by the test `session-handoff` "The Chain" states, is counted and +is not ranked. It belongs to that platform's lane, which a session on the platform works, so this +run gives it no group, no worker, and no claim. + An issue that asks a question rather than states a defect is not ranked and is never guessed at. It has no group, no worker, and no claim, so nothing in "Raising a Blocked Question" applies to it except how the question travels. It goes to the maintainer at the end of ranking, per diff --git a/.github/skills/session-handoff/SKILL.md b/.github/skills/session-handoff/SKILL.md index 5d1c82b41..709463297 100644 --- a/.github/skills/session-handoff/SKILL.md +++ b/.github/skills/session-handoff/SKILL.md @@ -63,19 +63,21 @@ without trusting the parts of it that have gone stale. lane of work, and a session that names no track uses `default`. Parallel lanes each name their own, so each closes its own predecessor and neither reads the other's state as current. - **A platform lane is for work that needs its platform.** A platform track, such as `wsl` or - `windows`, takes only issues that need its platform. An issue needs a platform when no host - lacking it can both fix the issue and verify the fix. A defect in WSL interop, the `WSLInterop` - binfmt handler, `/mnt/` paths, or `wslpath` needs WSL, and so does running a Windows - `.exe` from Linux. Behavior that differs under Windows PowerShell 5.1 or `winget` needs Windows, - and so do Windows path and ACL semantics. Systemd user scopes, apt, a bash script, and a `pwsh` - script run in a Linux container all run on a Linux host. Each needs a lane only where its defect - depends on WSL or Windows itself. An issue that needs a platform goes to that platform's lane. - An issue that needs none goes to the ordinary backlog, since a platform lane costs a separate - chain and a host-bound session. Where only part of an issue needs a platform, each such part is - filed as an issue of its own for its platform's lane. The original is narrowed to the part a - Linux host outside WSL can do and stays in the backlog. A platform lane whose next steps name no - issue that needs its platform is closed out with no successor. Its last link carries the outcome - as a comment, as `AGENTS.md` "Session Scope" closes a track whose work is complete. + `windows`, takes only issues that need its platform. An issue needs WSL where its defect lives + inside a WSL distro or in its interop with Windows. It needs Windows where its defect lives on + Windows itself. A Linux host outside WSL can neither reproduce such a defect nor verify + its fix. A defect in the `WSLInterop` binfmt handler, `/mnt/` paths, or `wslpath` needs + WSL, and so does running a Windows `.exe` from Linux. Behavior that differs under Windows + PowerShell 5.1 or `winget` needs Windows, whichever shell started it, and so do Windows path and + ACL semantics. Systemd user scopes, apt, a bash script, and a `pwsh` script run in a Linux + container all run on a Linux host. Each needs a lane only where its defect depends on WSL or + Windows itself. An issue that needs a platform goes to that platform's lane. An issue that needs + none goes to the ordinary backlog, since a platform lane costs a separate chain and a host-bound + session. Where only part of an issue needs a platform, each such part is filed as an issue of its + own for its platform's lane. The original is narrowed to what a Linux host outside WSL can do, or + closed in favor of those issues where nothing is left. A platform lane is closed out with no + successor once none of its next steps needs its platform. Its last link carries the outcome as a + comment, as `AGENTS.md` "Session Scope" closes a track whose work is complete. - **The title is for humans**, shaped `Session Handoff []: `, which `new` composes from the track and the subject it is given, so what a session writes is the subject alone. Nothing parses the title, so a maintainer is free to rename one. From 555d85f5099e45d58086dba5212764007d4ba34f Mon Sep 17 00:00:00 2001 From: Pieter Viljoen Date: Fri, 9 Oct 2026 10:33:20 -0700 Subject: [PATCH 07/13] Use the Issue's Reproduce-or-Verify Test and Carry It Into Both Consumers The platform test is again where the defect reproduces or the fix is verified, with a Linux host outside WSL as the second condition. A lane files its non-platform steps before closing out. backlog-burndown names held-back platform issues and splits mixed ones, and unattended-handoff Auto-Resolvable excludes an issue that needs a platform. Co-Authored-By: Claude Opus 5.5 --- .agents/skills/backlog-burndown/SKILL.md | 6 ++-- .agents/skills/session-handoff/SKILL.md | 30 +++++++++---------- .agents/skills/unattended-handoff/SKILL.md | 3 +- .../.source-digests/backlog-burndown | 2 +- .../.source-digests/session-handoff | 2 +- .../.source-digests/unattended-handoff | 2 +- .../skills/backlog-burndown/SKILL.md | 6 ++-- .../skills/session-handoff/SKILL.md | 30 +++++++++---------- .../skills/unattended-handoff/SKILL.md | 3 +- .github/skills/backlog-burndown/SKILL.md | 6 ++-- .github/skills/session-handoff/SKILL.md | 30 +++++++++---------- .github/skills/unattended-handoff/SKILL.md | 3 +- 12 files changed, 66 insertions(+), 57 deletions(-) diff --git a/.agents/skills/backlog-burndown/SKILL.md b/.agents/skills/backlog-burndown/SKILL.md index 3db68ccea..405c920e1 100644 --- a/.agents/skills/backlog-burndown/SKILL.md +++ b/.agents/skills/backlog-burndown/SKILL.md @@ -131,8 +131,10 @@ and the blocker each one waits on, since the maintainer reads the report rather bodies, and a stuck issue nobody names reads as ordinary backlog that simply never moves. An issue that needs a platform, by the test `session-handoff` "The Chain" states, is counted and -is not ranked. It belongs to that platform's lane, which a session on the platform works, so this -run gives it no group, no worker, and no claim. +is not ranked. It belongs to that platform's lane, so this run gives it no group, no worker, and no +claim. Where only part of it needs a platform, that part is split out first as "The Chain" says, +and the rest is ranked. The round's report names each issue held back this way and its platform, +as it names a `blocked` one. An issue that asks a question rather than states a defect is not ranked and is never guessed at. It has no group, no worker, and no claim, so nothing in "Raising a Blocked Question" applies to it diff --git a/.agents/skills/session-handoff/SKILL.md b/.agents/skills/session-handoff/SKILL.md index 709463297..75d1adc73 100644 --- a/.agents/skills/session-handoff/SKILL.md +++ b/.agents/skills/session-handoff/SKILL.md @@ -63,21 +63,21 @@ without trusting the parts of it that have gone stale. lane of work, and a session that names no track uses `default`. Parallel lanes each name their own, so each closes its own predecessor and neither reads the other's state as current. - **A platform lane is for work that needs its platform.** A platform track, such as `wsl` or - `windows`, takes only issues that need its platform. An issue needs WSL where its defect lives - inside a WSL distro or in its interop with Windows. It needs Windows where its defect lives on - Windows itself. A Linux host outside WSL can neither reproduce such a defect nor verify - its fix. A defect in the `WSLInterop` binfmt handler, `/mnt/` paths, or `wslpath` needs - WSL, and so does running a Windows `.exe` from Linux. Behavior that differs under Windows - PowerShell 5.1 or `winget` needs Windows, whichever shell started it, and so do Windows path and - ACL semantics. Systemd user scopes, apt, a bash script, and a `pwsh` script run in a Linux - container all run on a Linux host. Each needs a lane only where its defect depends on WSL or - Windows itself. An issue that needs a platform goes to that platform's lane. An issue that needs - none goes to the ordinary backlog, since a platform lane costs a separate chain and a host-bound - session. Where only part of an issue needs a platform, each such part is filed as an issue of its - own for its platform's lane. The original is narrowed to what a Linux host outside WSL can do, or - closed in favor of those issues where nothing is left. A platform lane is closed out with no - successor once none of its next steps needs its platform. Its last link carries the outcome as a - comment, as `AGENTS.md` "Session Scope" closes a track whose work is complete. + `windows`, takes an issue only when its defect reproduces, or its fix can be verified, on that + platform alone. It also needs that no Linux host outside WSL can both fix the issue and verify + the fix. An issue meeting both goes to its platform's lane. Any other issue goes to the ordinary + backlog, since a lane costs a separate chain and a host-bound session. A defect in WSL interop, + the `WSLInterop` binfmt handler, `/mnt/` paths, `wslpath`, or running a Windows `.exe` + from Linux reproduces only inside WSL. It is `wsl` work, although WSL runs on Windows. Behavior + that differs under Windows PowerShell 5.1 or `winget`, or in Windows path and ACL semantics, + reproduces on Windows without WSL, so it is `windows` work. Systemd user scopes, apt, a bash + script, and a `pwsh` script run in a Linux container need a lane only where the defect depends on + the platform itself. Where only part of an issue needs a platform, each such part is filed as an + issue of its own for its platform's lane. The original is narrowed to the rest, or closed in favor + of those issues where nothing is left. A platform lane is closed out with no successor once none + of its next steps needs its platform, each remaining step first filed as a backlog issue. Its last + link carries the outcome as a comment, as `AGENTS.md` "Session Scope" closes a track whose work is + complete. - **The title is for humans**, shaped `Session Handoff []: `, which `new` composes from the track and the subject it is given, so what a session writes is the subject alone. Nothing parses the title, so a maintainer is free to rename one. diff --git a/.agents/skills/unattended-handoff/SKILL.md b/.agents/skills/unattended-handoff/SKILL.md index dc6af99c1..664d895ea 100644 --- a/.agents/skills/unattended-handoff/SKILL.md +++ b/.agents/skills/unattended-handoff/SKILL.md @@ -154,7 +154,8 @@ does not qualify, since skipping one costs nothing and a guess costs a revert an and no comment asks the maintainer something still unanswered. - **The fix stays inside this repository's tree.** It changes no repository setting, ruleset, visibility, secret, or release condition, and needs no credential, account, or host the session - lacks. + lacks. It needs no platform either, by the test `session-handoff` "The Chain" states, since such + an issue belongs to that platform's lane whatever host the session runs on. - **The fix edits nothing under the hub's `host-setup/agent-safety/`.** That tree is the agent's own guard, and it is worked only in an attended session, so a human approves every change to it. - **It reverses no settled decision** recorded in an issue, a handoff, or the rule text. diff --git a/.claude-plugin/fleet-skills/.source-digests/backlog-burndown b/.claude-plugin/fleet-skills/.source-digests/backlog-burndown index 4f268cbb8..f45612419 100644 --- a/.claude-plugin/fleet-skills/.source-digests/backlog-burndown +++ b/.claude-plugin/fleet-skills/.source-digests/backlog-burndown @@ -1 +1 @@ -afb7270ce0791c8a +c6a9418f9f6d2faf diff --git a/.claude-plugin/fleet-skills/.source-digests/session-handoff b/.claude-plugin/fleet-skills/.source-digests/session-handoff index 0b0bca03e..f94413bb5 100644 --- a/.claude-plugin/fleet-skills/.source-digests/session-handoff +++ b/.claude-plugin/fleet-skills/.source-digests/session-handoff @@ -1 +1 @@ -000496e74d69bf8d +ed1d8c12e3007699 diff --git a/.claude-plugin/fleet-skills/.source-digests/unattended-handoff b/.claude-plugin/fleet-skills/.source-digests/unattended-handoff index 6efa07914..e0f2d8243 100644 --- a/.claude-plugin/fleet-skills/.source-digests/unattended-handoff +++ b/.claude-plugin/fleet-skills/.source-digests/unattended-handoff @@ -1 +1 @@ -edad0bee58257e24 +e214e1756d9173ee diff --git a/.claude-plugin/fleet-skills/skills/backlog-burndown/SKILL.md b/.claude-plugin/fleet-skills/skills/backlog-burndown/SKILL.md index 3db68ccea..405c920e1 100644 --- a/.claude-plugin/fleet-skills/skills/backlog-burndown/SKILL.md +++ b/.claude-plugin/fleet-skills/skills/backlog-burndown/SKILL.md @@ -131,8 +131,10 @@ and the blocker each one waits on, since the maintainer reads the report rather bodies, and a stuck issue nobody names reads as ordinary backlog that simply never moves. An issue that needs a platform, by the test `session-handoff` "The Chain" states, is counted and -is not ranked. It belongs to that platform's lane, which a session on the platform works, so this -run gives it no group, no worker, and no claim. +is not ranked. It belongs to that platform's lane, so this run gives it no group, no worker, and no +claim. Where only part of it needs a platform, that part is split out first as "The Chain" says, +and the rest is ranked. The round's report names each issue held back this way and its platform, +as it names a `blocked` one. An issue that asks a question rather than states a defect is not ranked and is never guessed at. It has no group, no worker, and no claim, so nothing in "Raising a Blocked Question" applies to it diff --git a/.claude-plugin/fleet-skills/skills/session-handoff/SKILL.md b/.claude-plugin/fleet-skills/skills/session-handoff/SKILL.md index 709463297..75d1adc73 100644 --- a/.claude-plugin/fleet-skills/skills/session-handoff/SKILL.md +++ b/.claude-plugin/fleet-skills/skills/session-handoff/SKILL.md @@ -63,21 +63,21 @@ without trusting the parts of it that have gone stale. lane of work, and a session that names no track uses `default`. Parallel lanes each name their own, so each closes its own predecessor and neither reads the other's state as current. - **A platform lane is for work that needs its platform.** A platform track, such as `wsl` or - `windows`, takes only issues that need its platform. An issue needs WSL where its defect lives - inside a WSL distro or in its interop with Windows. It needs Windows where its defect lives on - Windows itself. A Linux host outside WSL can neither reproduce such a defect nor verify - its fix. A defect in the `WSLInterop` binfmt handler, `/mnt/` paths, or `wslpath` needs - WSL, and so does running a Windows `.exe` from Linux. Behavior that differs under Windows - PowerShell 5.1 or `winget` needs Windows, whichever shell started it, and so do Windows path and - ACL semantics. Systemd user scopes, apt, a bash script, and a `pwsh` script run in a Linux - container all run on a Linux host. Each needs a lane only where its defect depends on WSL or - Windows itself. An issue that needs a platform goes to that platform's lane. An issue that needs - none goes to the ordinary backlog, since a platform lane costs a separate chain and a host-bound - session. Where only part of an issue needs a platform, each such part is filed as an issue of its - own for its platform's lane. The original is narrowed to what a Linux host outside WSL can do, or - closed in favor of those issues where nothing is left. A platform lane is closed out with no - successor once none of its next steps needs its platform. Its last link carries the outcome as a - comment, as `AGENTS.md` "Session Scope" closes a track whose work is complete. + `windows`, takes an issue only when its defect reproduces, or its fix can be verified, on that + platform alone. It also needs that no Linux host outside WSL can both fix the issue and verify + the fix. An issue meeting both goes to its platform's lane. Any other issue goes to the ordinary + backlog, since a lane costs a separate chain and a host-bound session. A defect in WSL interop, + the `WSLInterop` binfmt handler, `/mnt/` paths, `wslpath`, or running a Windows `.exe` + from Linux reproduces only inside WSL. It is `wsl` work, although WSL runs on Windows. Behavior + that differs under Windows PowerShell 5.1 or `winget`, or in Windows path and ACL semantics, + reproduces on Windows without WSL, so it is `windows` work. Systemd user scopes, apt, a bash + script, and a `pwsh` script run in a Linux container need a lane only where the defect depends on + the platform itself. Where only part of an issue needs a platform, each such part is filed as an + issue of its own for its platform's lane. The original is narrowed to the rest, or closed in favor + of those issues where nothing is left. A platform lane is closed out with no successor once none + of its next steps needs its platform, each remaining step first filed as a backlog issue. Its last + link carries the outcome as a comment, as `AGENTS.md` "Session Scope" closes a track whose work is + complete. - **The title is for humans**, shaped `Session Handoff []: `, which `new` composes from the track and the subject it is given, so what a session writes is the subject alone. Nothing parses the title, so a maintainer is free to rename one. diff --git a/.claude-plugin/fleet-skills/skills/unattended-handoff/SKILL.md b/.claude-plugin/fleet-skills/skills/unattended-handoff/SKILL.md index dc6af99c1..664d895ea 100644 --- a/.claude-plugin/fleet-skills/skills/unattended-handoff/SKILL.md +++ b/.claude-plugin/fleet-skills/skills/unattended-handoff/SKILL.md @@ -154,7 +154,8 @@ does not qualify, since skipping one costs nothing and a guess costs a revert an and no comment asks the maintainer something still unanswered. - **The fix stays inside this repository's tree.** It changes no repository setting, ruleset, visibility, secret, or release condition, and needs no credential, account, or host the session - lacks. + lacks. It needs no platform either, by the test `session-handoff` "The Chain" states, since such + an issue belongs to that platform's lane whatever host the session runs on. - **The fix edits nothing under the hub's `host-setup/agent-safety/`.** That tree is the agent's own guard, and it is worked only in an attended session, so a human approves every change to it. - **It reverses no settled decision** recorded in an issue, a handoff, or the rule text. diff --git a/.github/skills/backlog-burndown/SKILL.md b/.github/skills/backlog-burndown/SKILL.md index 3db68ccea..405c920e1 100644 --- a/.github/skills/backlog-burndown/SKILL.md +++ b/.github/skills/backlog-burndown/SKILL.md @@ -131,8 +131,10 @@ and the blocker each one waits on, since the maintainer reads the report rather bodies, and a stuck issue nobody names reads as ordinary backlog that simply never moves. An issue that needs a platform, by the test `session-handoff` "The Chain" states, is counted and -is not ranked. It belongs to that platform's lane, which a session on the platform works, so this -run gives it no group, no worker, and no claim. +is not ranked. It belongs to that platform's lane, so this run gives it no group, no worker, and no +claim. Where only part of it needs a platform, that part is split out first as "The Chain" says, +and the rest is ranked. The round's report names each issue held back this way and its platform, +as it names a `blocked` one. An issue that asks a question rather than states a defect is not ranked and is never guessed at. It has no group, no worker, and no claim, so nothing in "Raising a Blocked Question" applies to it diff --git a/.github/skills/session-handoff/SKILL.md b/.github/skills/session-handoff/SKILL.md index 709463297..75d1adc73 100644 --- a/.github/skills/session-handoff/SKILL.md +++ b/.github/skills/session-handoff/SKILL.md @@ -63,21 +63,21 @@ without trusting the parts of it that have gone stale. lane of work, and a session that names no track uses `default`. Parallel lanes each name their own, so each closes its own predecessor and neither reads the other's state as current. - **A platform lane is for work that needs its platform.** A platform track, such as `wsl` or - `windows`, takes only issues that need its platform. An issue needs WSL where its defect lives - inside a WSL distro or in its interop with Windows. It needs Windows where its defect lives on - Windows itself. A Linux host outside WSL can neither reproduce such a defect nor verify - its fix. A defect in the `WSLInterop` binfmt handler, `/mnt/` paths, or `wslpath` needs - WSL, and so does running a Windows `.exe` from Linux. Behavior that differs under Windows - PowerShell 5.1 or `winget` needs Windows, whichever shell started it, and so do Windows path and - ACL semantics. Systemd user scopes, apt, a bash script, and a `pwsh` script run in a Linux - container all run on a Linux host. Each needs a lane only where its defect depends on WSL or - Windows itself. An issue that needs a platform goes to that platform's lane. An issue that needs - none goes to the ordinary backlog, since a platform lane costs a separate chain and a host-bound - session. Where only part of an issue needs a platform, each such part is filed as an issue of its - own for its platform's lane. The original is narrowed to what a Linux host outside WSL can do, or - closed in favor of those issues where nothing is left. A platform lane is closed out with no - successor once none of its next steps needs its platform. Its last link carries the outcome as a - comment, as `AGENTS.md` "Session Scope" closes a track whose work is complete. + `windows`, takes an issue only when its defect reproduces, or its fix can be verified, on that + platform alone. It also needs that no Linux host outside WSL can both fix the issue and verify + the fix. An issue meeting both goes to its platform's lane. Any other issue goes to the ordinary + backlog, since a lane costs a separate chain and a host-bound session. A defect in WSL interop, + the `WSLInterop` binfmt handler, `/mnt/` paths, `wslpath`, or running a Windows `.exe` + from Linux reproduces only inside WSL. It is `wsl` work, although WSL runs on Windows. Behavior + that differs under Windows PowerShell 5.1 or `winget`, or in Windows path and ACL semantics, + reproduces on Windows without WSL, so it is `windows` work. Systemd user scopes, apt, a bash + script, and a `pwsh` script run in a Linux container need a lane only where the defect depends on + the platform itself. Where only part of an issue needs a platform, each such part is filed as an + issue of its own for its platform's lane. The original is narrowed to the rest, or closed in favor + of those issues where nothing is left. A platform lane is closed out with no successor once none + of its next steps needs its platform, each remaining step first filed as a backlog issue. Its last + link carries the outcome as a comment, as `AGENTS.md` "Session Scope" closes a track whose work is + complete. - **The title is for humans**, shaped `Session Handoff []: `, which `new` composes from the track and the subject it is given, so what a session writes is the subject alone. Nothing parses the title, so a maintainer is free to rename one. diff --git a/.github/skills/unattended-handoff/SKILL.md b/.github/skills/unattended-handoff/SKILL.md index dc6af99c1..664d895ea 100644 --- a/.github/skills/unattended-handoff/SKILL.md +++ b/.github/skills/unattended-handoff/SKILL.md @@ -154,7 +154,8 @@ does not qualify, since skipping one costs nothing and a guess costs a revert an and no comment asks the maintainer something still unanswered. - **The fix stays inside this repository's tree.** It changes no repository setting, ruleset, visibility, secret, or release condition, and needs no credential, account, or host the session - lacks. + lacks. It needs no platform either, by the test `session-handoff` "The Chain" states, since such + an issue belongs to that platform's lane whatever host the session runs on. - **The fix edits nothing under the hub's `host-setup/agent-safety/`.** That tree is the agent's own guard, and it is worked only in an attended session, so a human approves every change to it. - **It reverses no settled decision** recorded in an issue, a handoff, or the rule text. From 5f55ba4b47e56dc7bb0d87b6d62b485ce8faa10f Mon Sep 17 00:00:00 2001 From: Pieter Viljoen Date: Fri, 9 Oct 2026 10:37:38 -0700 Subject: [PATCH 08/13] Apply Both Platform Conditions to the Examples and Hold Mixed Issues Back The examples now meet only the first condition and still go to the backlog where a Linux host verifies the fix. A lane files only the steps with no issue before closing out, backlog-burndown holds a mixed issue back until it is split, and the unattended picker skips one. Co-Authored-By: Claude Opus 5.5 --- .agents/skills/backlog-burndown/SKILL.md | 4 +-- .agents/skills/session-handoff/SKILL.md | 32 +++++++++---------- .agents/skills/unattended-handoff/SKILL.md | 5 +-- .../.source-digests/backlog-burndown | 2 +- .../.source-digests/session-handoff | 2 +- .../.source-digests/unattended-handoff | 2 +- .../skills/backlog-burndown/SKILL.md | 4 +-- .../skills/session-handoff/SKILL.md | 32 +++++++++---------- .../skills/unattended-handoff/SKILL.md | 5 +-- .github/skills/backlog-burndown/SKILL.md | 4 +-- .github/skills/session-handoff/SKILL.md | 32 +++++++++---------- .github/skills/unattended-handoff/SKILL.md | 5 +-- 12 files changed, 66 insertions(+), 63 deletions(-) diff --git a/.agents/skills/backlog-burndown/SKILL.md b/.agents/skills/backlog-burndown/SKILL.md index 405c920e1..effc38aea 100644 --- a/.agents/skills/backlog-burndown/SKILL.md +++ b/.agents/skills/backlog-burndown/SKILL.md @@ -132,8 +132,8 @@ bodies, and a stuck issue nobody names reads as ordinary backlog that simply nev An issue that needs a platform, by the test `session-handoff` "The Chain" states, is counted and is not ranked. It belongs to that platform's lane, so this run gives it no group, no worker, and no -claim. Where only part of it needs a platform, that part is split out first as "The Chain" says, -and the rest is ranked. The round's report names each issue held back this way and its platform, +claim. Where only part of it needs a platform, it is held back the same way until that part is +split out as "The Chain" says. The rest is ranked after that. The round's report names each issue held back this way and its platform, as it names a `blocked` one. An issue that asks a question rather than states a defect is not ranked and is never guessed at. diff --git a/.agents/skills/session-handoff/SKILL.md b/.agents/skills/session-handoff/SKILL.md index 75d1adc73..398c7cbf9 100644 --- a/.agents/skills/session-handoff/SKILL.md +++ b/.agents/skills/session-handoff/SKILL.md @@ -62,22 +62,22 @@ without trusting the parts of it that have gone stale. - **One open handoff issue per track per repository.** A track is a short kebab-case slug naming a lane of work, and a session that names no track uses `default`. Parallel lanes each name their own, so each closes its own predecessor and neither reads the other's state as current. -- **A platform lane is for work that needs its platform.** A platform track, such as `wsl` or - `windows`, takes an issue only when its defect reproduces, or its fix can be verified, on that - platform alone. It also needs that no Linux host outside WSL can both fix the issue and verify - the fix. An issue meeting both goes to its platform's lane. Any other issue goes to the ordinary - backlog, since a lane costs a separate chain and a host-bound session. A defect in WSL interop, - the `WSLInterop` binfmt handler, `/mnt/` paths, `wslpath`, or running a Windows `.exe` - from Linux reproduces only inside WSL. It is `wsl` work, although WSL runs on Windows. Behavior - that differs under Windows PowerShell 5.1 or `winget`, or in Windows path and ACL semantics, - reproduces on Windows without WSL, so it is `windows` work. Systemd user scopes, apt, a bash - script, and a `pwsh` script run in a Linux container need a lane only where the defect depends on - the platform itself. Where only part of an issue needs a platform, each such part is filed as an - issue of its own for its platform's lane. The original is narrowed to the rest, or closed in favor - of those issues where nothing is left. A platform lane is closed out with no successor once none - of its next steps needs its platform, each remaining step first filed as a backlog issue. Its last - link carries the outcome as a comment, as `AGENTS.md` "Session Scope" closes a track whose work is - complete. +- **A platform lane is for work that needs its platform.** A platform track takes an issue only + when its defect reproduces, or its fix can be verified, on that platform alone. It also needs + that no Linux host outside WSL can both fix the issue and verify the fix. An issue meeting both + goes to its platform's lane. Any other issue goes to the ordinary backlog, since a lane costs a + separate chain and a host-bound session. A defect in WSL interop, the `WSLInterop` binfmt + handler, `/mnt/` paths, or `wslpath` reproduces only inside WSL. So does running a Windows + `.exe` from Linux, although WSL runs on Windows. Behavior that differs under Windows PowerShell + 5.1 or `winget`, or in Windows path and ACL semantics, reproduces only on Windows. Either still + goes to the backlog where a Linux host outside WSL verifies its fix, as a plain unit test of a + path translation can. Systemd user scopes, apt, and bash or `pwsh` scripts in a Linux container + need a lane only where the defect depends on the platform. Where only part of an issue needs a + platform, each such part is filed as an issue of its own for its platform's lane. The original is + narrowed to the rest, or closed in favor of those issues where nothing is left. A platform lane + is closed out with no successor once none of its next steps needs its platform. Before that, each + remaining step with no issue of its own is filed as one. Its last link carries the outcome as a + comment, as `AGENTS.md` "Session Scope" closes a track whose work is complete. - **The title is for humans**, shaped `Session Handoff []: `, which `new` composes from the track and the subject it is given, so what a session writes is the subject alone. Nothing parses the title, so a maintainer is free to rename one. diff --git a/.agents/skills/unattended-handoff/SKILL.md b/.agents/skills/unattended-handoff/SKILL.md index 664d895ea..267ff0c26 100644 --- a/.agents/skills/unattended-handoff/SKILL.md +++ b/.agents/skills/unattended-handoff/SKILL.md @@ -154,8 +154,9 @@ does not qualify, since skipping one costs nothing and a guess costs a revert an and no comment asks the maintainer something still unanswered. - **The fix stays inside this repository's tree.** It changes no repository setting, ruleset, visibility, secret, or release condition, and needs no credential, account, or host the session - lacks. It needs no platform either, by the test `session-handoff` "The Chain" states, since such - an issue belongs to that platform's lane whatever host the session runs on. + lacks. It needs no platform, in whole or in part, by the test `session-handoff` "The Chain" + states. Such an issue belongs to that platform's lane whatever host the session runs on. + Splitting off a platform part is a write the picker does not make. - **The fix edits nothing under the hub's `host-setup/agent-safety/`.** That tree is the agent's own guard, and it is worked only in an attended session, so a human approves every change to it. - **It reverses no settled decision** recorded in an issue, a handoff, or the rule text. diff --git a/.claude-plugin/fleet-skills/.source-digests/backlog-burndown b/.claude-plugin/fleet-skills/.source-digests/backlog-burndown index f45612419..3864a2a25 100644 --- a/.claude-plugin/fleet-skills/.source-digests/backlog-burndown +++ b/.claude-plugin/fleet-skills/.source-digests/backlog-burndown @@ -1 +1 @@ -c6a9418f9f6d2faf +812c9240e354aa88 diff --git a/.claude-plugin/fleet-skills/.source-digests/session-handoff b/.claude-plugin/fleet-skills/.source-digests/session-handoff index f94413bb5..6d54cb5f1 100644 --- a/.claude-plugin/fleet-skills/.source-digests/session-handoff +++ b/.claude-plugin/fleet-skills/.source-digests/session-handoff @@ -1 +1 @@ -ed1d8c12e3007699 +3cd9007d63d09a80 diff --git a/.claude-plugin/fleet-skills/.source-digests/unattended-handoff b/.claude-plugin/fleet-skills/.source-digests/unattended-handoff index e0f2d8243..02f032a6b 100644 --- a/.claude-plugin/fleet-skills/.source-digests/unattended-handoff +++ b/.claude-plugin/fleet-skills/.source-digests/unattended-handoff @@ -1 +1 @@ -e214e1756d9173ee +9656c1eed2e735a5 diff --git a/.claude-plugin/fleet-skills/skills/backlog-burndown/SKILL.md b/.claude-plugin/fleet-skills/skills/backlog-burndown/SKILL.md index 405c920e1..effc38aea 100644 --- a/.claude-plugin/fleet-skills/skills/backlog-burndown/SKILL.md +++ b/.claude-plugin/fleet-skills/skills/backlog-burndown/SKILL.md @@ -132,8 +132,8 @@ bodies, and a stuck issue nobody names reads as ordinary backlog that simply nev An issue that needs a platform, by the test `session-handoff` "The Chain" states, is counted and is not ranked. It belongs to that platform's lane, so this run gives it no group, no worker, and no -claim. Where only part of it needs a platform, that part is split out first as "The Chain" says, -and the rest is ranked. The round's report names each issue held back this way and its platform, +claim. Where only part of it needs a platform, it is held back the same way until that part is +split out as "The Chain" says. The rest is ranked after that. The round's report names each issue held back this way and its platform, as it names a `blocked` one. An issue that asks a question rather than states a defect is not ranked and is never guessed at. diff --git a/.claude-plugin/fleet-skills/skills/session-handoff/SKILL.md b/.claude-plugin/fleet-skills/skills/session-handoff/SKILL.md index 75d1adc73..398c7cbf9 100644 --- a/.claude-plugin/fleet-skills/skills/session-handoff/SKILL.md +++ b/.claude-plugin/fleet-skills/skills/session-handoff/SKILL.md @@ -62,22 +62,22 @@ without trusting the parts of it that have gone stale. - **One open handoff issue per track per repository.** A track is a short kebab-case slug naming a lane of work, and a session that names no track uses `default`. Parallel lanes each name their own, so each closes its own predecessor and neither reads the other's state as current. -- **A platform lane is for work that needs its platform.** A platform track, such as `wsl` or - `windows`, takes an issue only when its defect reproduces, or its fix can be verified, on that - platform alone. It also needs that no Linux host outside WSL can both fix the issue and verify - the fix. An issue meeting both goes to its platform's lane. Any other issue goes to the ordinary - backlog, since a lane costs a separate chain and a host-bound session. A defect in WSL interop, - the `WSLInterop` binfmt handler, `/mnt/` paths, `wslpath`, or running a Windows `.exe` - from Linux reproduces only inside WSL. It is `wsl` work, although WSL runs on Windows. Behavior - that differs under Windows PowerShell 5.1 or `winget`, or in Windows path and ACL semantics, - reproduces on Windows without WSL, so it is `windows` work. Systemd user scopes, apt, a bash - script, and a `pwsh` script run in a Linux container need a lane only where the defect depends on - the platform itself. Where only part of an issue needs a platform, each such part is filed as an - issue of its own for its platform's lane. The original is narrowed to the rest, or closed in favor - of those issues where nothing is left. A platform lane is closed out with no successor once none - of its next steps needs its platform, each remaining step first filed as a backlog issue. Its last - link carries the outcome as a comment, as `AGENTS.md` "Session Scope" closes a track whose work is - complete. +- **A platform lane is for work that needs its platform.** A platform track takes an issue only + when its defect reproduces, or its fix can be verified, on that platform alone. It also needs + that no Linux host outside WSL can both fix the issue and verify the fix. An issue meeting both + goes to its platform's lane. Any other issue goes to the ordinary backlog, since a lane costs a + separate chain and a host-bound session. A defect in WSL interop, the `WSLInterop` binfmt + handler, `/mnt/` paths, or `wslpath` reproduces only inside WSL. So does running a Windows + `.exe` from Linux, although WSL runs on Windows. Behavior that differs under Windows PowerShell + 5.1 or `winget`, or in Windows path and ACL semantics, reproduces only on Windows. Either still + goes to the backlog where a Linux host outside WSL verifies its fix, as a plain unit test of a + path translation can. Systemd user scopes, apt, and bash or `pwsh` scripts in a Linux container + need a lane only where the defect depends on the platform. Where only part of an issue needs a + platform, each such part is filed as an issue of its own for its platform's lane. The original is + narrowed to the rest, or closed in favor of those issues where nothing is left. A platform lane + is closed out with no successor once none of its next steps needs its platform. Before that, each + remaining step with no issue of its own is filed as one. Its last link carries the outcome as a + comment, as `AGENTS.md` "Session Scope" closes a track whose work is complete. - **The title is for humans**, shaped `Session Handoff []: `, which `new` composes from the track and the subject it is given, so what a session writes is the subject alone. Nothing parses the title, so a maintainer is free to rename one. diff --git a/.claude-plugin/fleet-skills/skills/unattended-handoff/SKILL.md b/.claude-plugin/fleet-skills/skills/unattended-handoff/SKILL.md index 664d895ea..267ff0c26 100644 --- a/.claude-plugin/fleet-skills/skills/unattended-handoff/SKILL.md +++ b/.claude-plugin/fleet-skills/skills/unattended-handoff/SKILL.md @@ -154,8 +154,9 @@ does not qualify, since skipping one costs nothing and a guess costs a revert an and no comment asks the maintainer something still unanswered. - **The fix stays inside this repository's tree.** It changes no repository setting, ruleset, visibility, secret, or release condition, and needs no credential, account, or host the session - lacks. It needs no platform either, by the test `session-handoff` "The Chain" states, since such - an issue belongs to that platform's lane whatever host the session runs on. + lacks. It needs no platform, in whole or in part, by the test `session-handoff` "The Chain" + states. Such an issue belongs to that platform's lane whatever host the session runs on. + Splitting off a platform part is a write the picker does not make. - **The fix edits nothing under the hub's `host-setup/agent-safety/`.** That tree is the agent's own guard, and it is worked only in an attended session, so a human approves every change to it. - **It reverses no settled decision** recorded in an issue, a handoff, or the rule text. diff --git a/.github/skills/backlog-burndown/SKILL.md b/.github/skills/backlog-burndown/SKILL.md index 405c920e1..effc38aea 100644 --- a/.github/skills/backlog-burndown/SKILL.md +++ b/.github/skills/backlog-burndown/SKILL.md @@ -132,8 +132,8 @@ bodies, and a stuck issue nobody names reads as ordinary backlog that simply nev An issue that needs a platform, by the test `session-handoff` "The Chain" states, is counted and is not ranked. It belongs to that platform's lane, so this run gives it no group, no worker, and no -claim. Where only part of it needs a platform, that part is split out first as "The Chain" says, -and the rest is ranked. The round's report names each issue held back this way and its platform, +claim. Where only part of it needs a platform, it is held back the same way until that part is +split out as "The Chain" says. The rest is ranked after that. The round's report names each issue held back this way and its platform, as it names a `blocked` one. An issue that asks a question rather than states a defect is not ranked and is never guessed at. diff --git a/.github/skills/session-handoff/SKILL.md b/.github/skills/session-handoff/SKILL.md index 75d1adc73..398c7cbf9 100644 --- a/.github/skills/session-handoff/SKILL.md +++ b/.github/skills/session-handoff/SKILL.md @@ -62,22 +62,22 @@ without trusting the parts of it that have gone stale. - **One open handoff issue per track per repository.** A track is a short kebab-case slug naming a lane of work, and a session that names no track uses `default`. Parallel lanes each name their own, so each closes its own predecessor and neither reads the other's state as current. -- **A platform lane is for work that needs its platform.** A platform track, such as `wsl` or - `windows`, takes an issue only when its defect reproduces, or its fix can be verified, on that - platform alone. It also needs that no Linux host outside WSL can both fix the issue and verify - the fix. An issue meeting both goes to its platform's lane. Any other issue goes to the ordinary - backlog, since a lane costs a separate chain and a host-bound session. A defect in WSL interop, - the `WSLInterop` binfmt handler, `/mnt/` paths, `wslpath`, or running a Windows `.exe` - from Linux reproduces only inside WSL. It is `wsl` work, although WSL runs on Windows. Behavior - that differs under Windows PowerShell 5.1 or `winget`, or in Windows path and ACL semantics, - reproduces on Windows without WSL, so it is `windows` work. Systemd user scopes, apt, a bash - script, and a `pwsh` script run in a Linux container need a lane only where the defect depends on - the platform itself. Where only part of an issue needs a platform, each such part is filed as an - issue of its own for its platform's lane. The original is narrowed to the rest, or closed in favor - of those issues where nothing is left. A platform lane is closed out with no successor once none - of its next steps needs its platform, each remaining step first filed as a backlog issue. Its last - link carries the outcome as a comment, as `AGENTS.md` "Session Scope" closes a track whose work is - complete. +- **A platform lane is for work that needs its platform.** A platform track takes an issue only + when its defect reproduces, or its fix can be verified, on that platform alone. It also needs + that no Linux host outside WSL can both fix the issue and verify the fix. An issue meeting both + goes to its platform's lane. Any other issue goes to the ordinary backlog, since a lane costs a + separate chain and a host-bound session. A defect in WSL interop, the `WSLInterop` binfmt + handler, `/mnt/` paths, or `wslpath` reproduces only inside WSL. So does running a Windows + `.exe` from Linux, although WSL runs on Windows. Behavior that differs under Windows PowerShell + 5.1 or `winget`, or in Windows path and ACL semantics, reproduces only on Windows. Either still + goes to the backlog where a Linux host outside WSL verifies its fix, as a plain unit test of a + path translation can. Systemd user scopes, apt, and bash or `pwsh` scripts in a Linux container + need a lane only where the defect depends on the platform. Where only part of an issue needs a + platform, each such part is filed as an issue of its own for its platform's lane. The original is + narrowed to the rest, or closed in favor of those issues where nothing is left. A platform lane + is closed out with no successor once none of its next steps needs its platform. Before that, each + remaining step with no issue of its own is filed as one. Its last link carries the outcome as a + comment, as `AGENTS.md` "Session Scope" closes a track whose work is complete. - **The title is for humans**, shaped `Session Handoff []: `, which `new` composes from the track and the subject it is given, so what a session writes is the subject alone. Nothing parses the title, so a maintainer is free to rename one. diff --git a/.github/skills/unattended-handoff/SKILL.md b/.github/skills/unattended-handoff/SKILL.md index 664d895ea..267ff0c26 100644 --- a/.github/skills/unattended-handoff/SKILL.md +++ b/.github/skills/unattended-handoff/SKILL.md @@ -154,8 +154,9 @@ does not qualify, since skipping one costs nothing and a guess costs a revert an and no comment asks the maintainer something still unanswered. - **The fix stays inside this repository's tree.** It changes no repository setting, ruleset, visibility, secret, or release condition, and needs no credential, account, or host the session - lacks. It needs no platform either, by the test `session-handoff` "The Chain" states, since such - an issue belongs to that platform's lane whatever host the session runs on. + lacks. It needs no platform, in whole or in part, by the test `session-handoff` "The Chain" + states. Such an issue belongs to that platform's lane whatever host the session runs on. + Splitting off a platform part is a write the picker does not make. - **The fix edits nothing under the hub's `host-setup/agent-safety/`.** That tree is the agent's own guard, and it is worked only in an attended session, so a human approves every change to it. - **It reverses no settled decision** recorded in an issue, a handoff, or the rule text. From b90b9b1ee582138db3b0a9b4a7125ee7c795685f Mon Sep 17 00:00:00 2001 From: Pieter Viljoen Date: Fri, 9 Oct 2026 10:41:13 -0700 Subject: [PATCH 09/13] Say Who Splits a Mixed Issue and Where Its Parts Belong backlog-burndown holds a mixed issue until an attended session splits it and reports that it waits on the split, and unattended-handoff sends only a whole platform issue to its lane. Co-Authored-By: Claude Opus 5.5 --- .agents/skills/backlog-burndown/SKILL.md | 7 ++++--- .agents/skills/unattended-handoff/SKILL.md | 4 ++-- .../fleet-skills/.source-digests/backlog-burndown | 2 +- .../fleet-skills/.source-digests/unattended-handoff | 2 +- .../fleet-skills/skills/backlog-burndown/SKILL.md | 7 ++++--- .../fleet-skills/skills/unattended-handoff/SKILL.md | 4 ++-- .github/skills/backlog-burndown/SKILL.md | 7 ++++--- .github/skills/unattended-handoff/SKILL.md | 4 ++-- 8 files changed, 20 insertions(+), 17 deletions(-) diff --git a/.agents/skills/backlog-burndown/SKILL.md b/.agents/skills/backlog-burndown/SKILL.md index effc38aea..b60e804d1 100644 --- a/.agents/skills/backlog-burndown/SKILL.md +++ b/.agents/skills/backlog-burndown/SKILL.md @@ -132,9 +132,10 @@ bodies, and a stuck issue nobody names reads as ordinary backlog that simply nev An issue that needs a platform, by the test `session-handoff` "The Chain" states, is counted and is not ranked. It belongs to that platform's lane, so this run gives it no group, no worker, and no -claim. Where only part of it needs a platform, it is held back the same way until that part is -split out as "The Chain" says. The rest is ranked after that. The round's report names each issue held back this way and its platform, -as it names a `blocked` one. +claim. An issue only part of which needs a platform is held back the same way. It waits on the +split "The Chain" describes, which an attended session makes, and the narrowed issue is ranked once +that split lands. The round's report names each issue held back this way, its platform, and +whether it waits on a split, as it names a `blocked` one. An issue that asks a question rather than states a defect is not ranked and is never guessed at. It has no group, no worker, and no claim, so nothing in "Raising a Blocked Question" applies to it diff --git a/.agents/skills/unattended-handoff/SKILL.md b/.agents/skills/unattended-handoff/SKILL.md index 267ff0c26..fdb602486 100644 --- a/.agents/skills/unattended-handoff/SKILL.md +++ b/.agents/skills/unattended-handoff/SKILL.md @@ -155,8 +155,8 @@ does not qualify, since skipping one costs nothing and a guess costs a revert an - **The fix stays inside this repository's tree.** It changes no repository setting, ruleset, visibility, secret, or release condition, and needs no credential, account, or host the session lacks. It needs no platform, in whole or in part, by the test `session-handoff` "The Chain" - states. Such an issue belongs to that platform's lane whatever host the session runs on. - Splitting off a platform part is a write the picker does not make. + states. A whole one belongs to that platform's lane whatever host the session runs on. A partial + one waits on the split that section describes, a write the picker does not make. - **The fix edits nothing under the hub's `host-setup/agent-safety/`.** That tree is the agent's own guard, and it is worked only in an attended session, so a human approves every change to it. - **It reverses no settled decision** recorded in an issue, a handoff, or the rule text. diff --git a/.claude-plugin/fleet-skills/.source-digests/backlog-burndown b/.claude-plugin/fleet-skills/.source-digests/backlog-burndown index 3864a2a25..cdcc6cbf4 100644 --- a/.claude-plugin/fleet-skills/.source-digests/backlog-burndown +++ b/.claude-plugin/fleet-skills/.source-digests/backlog-burndown @@ -1 +1 @@ -812c9240e354aa88 +3ab1990bcbe7c9cd diff --git a/.claude-plugin/fleet-skills/.source-digests/unattended-handoff b/.claude-plugin/fleet-skills/.source-digests/unattended-handoff index 02f032a6b..93a1ab4fc 100644 --- a/.claude-plugin/fleet-skills/.source-digests/unattended-handoff +++ b/.claude-plugin/fleet-skills/.source-digests/unattended-handoff @@ -1 +1 @@ -9656c1eed2e735a5 +552e1b27e648a77e diff --git a/.claude-plugin/fleet-skills/skills/backlog-burndown/SKILL.md b/.claude-plugin/fleet-skills/skills/backlog-burndown/SKILL.md index effc38aea..b60e804d1 100644 --- a/.claude-plugin/fleet-skills/skills/backlog-burndown/SKILL.md +++ b/.claude-plugin/fleet-skills/skills/backlog-burndown/SKILL.md @@ -132,9 +132,10 @@ bodies, and a stuck issue nobody names reads as ordinary backlog that simply nev An issue that needs a platform, by the test `session-handoff` "The Chain" states, is counted and is not ranked. It belongs to that platform's lane, so this run gives it no group, no worker, and no -claim. Where only part of it needs a platform, it is held back the same way until that part is -split out as "The Chain" says. The rest is ranked after that. The round's report names each issue held back this way and its platform, -as it names a `blocked` one. +claim. An issue only part of which needs a platform is held back the same way. It waits on the +split "The Chain" describes, which an attended session makes, and the narrowed issue is ranked once +that split lands. The round's report names each issue held back this way, its platform, and +whether it waits on a split, as it names a `blocked` one. An issue that asks a question rather than states a defect is not ranked and is never guessed at. It has no group, no worker, and no claim, so nothing in "Raising a Blocked Question" applies to it diff --git a/.claude-plugin/fleet-skills/skills/unattended-handoff/SKILL.md b/.claude-plugin/fleet-skills/skills/unattended-handoff/SKILL.md index 267ff0c26..fdb602486 100644 --- a/.claude-plugin/fleet-skills/skills/unattended-handoff/SKILL.md +++ b/.claude-plugin/fleet-skills/skills/unattended-handoff/SKILL.md @@ -155,8 +155,8 @@ does not qualify, since skipping one costs nothing and a guess costs a revert an - **The fix stays inside this repository's tree.** It changes no repository setting, ruleset, visibility, secret, or release condition, and needs no credential, account, or host the session lacks. It needs no platform, in whole or in part, by the test `session-handoff` "The Chain" - states. Such an issue belongs to that platform's lane whatever host the session runs on. - Splitting off a platform part is a write the picker does not make. + states. A whole one belongs to that platform's lane whatever host the session runs on. A partial + one waits on the split that section describes, a write the picker does not make. - **The fix edits nothing under the hub's `host-setup/agent-safety/`.** That tree is the agent's own guard, and it is worked only in an attended session, so a human approves every change to it. - **It reverses no settled decision** recorded in an issue, a handoff, or the rule text. diff --git a/.github/skills/backlog-burndown/SKILL.md b/.github/skills/backlog-burndown/SKILL.md index effc38aea..b60e804d1 100644 --- a/.github/skills/backlog-burndown/SKILL.md +++ b/.github/skills/backlog-burndown/SKILL.md @@ -132,9 +132,10 @@ bodies, and a stuck issue nobody names reads as ordinary backlog that simply nev An issue that needs a platform, by the test `session-handoff` "The Chain" states, is counted and is not ranked. It belongs to that platform's lane, so this run gives it no group, no worker, and no -claim. Where only part of it needs a platform, it is held back the same way until that part is -split out as "The Chain" says. The rest is ranked after that. The round's report names each issue held back this way and its platform, -as it names a `blocked` one. +claim. An issue only part of which needs a platform is held back the same way. It waits on the +split "The Chain" describes, which an attended session makes, and the narrowed issue is ranked once +that split lands. The round's report names each issue held back this way, its platform, and +whether it waits on a split, as it names a `blocked` one. An issue that asks a question rather than states a defect is not ranked and is never guessed at. It has no group, no worker, and no claim, so nothing in "Raising a Blocked Question" applies to it diff --git a/.github/skills/unattended-handoff/SKILL.md b/.github/skills/unattended-handoff/SKILL.md index 267ff0c26..fdb602486 100644 --- a/.github/skills/unattended-handoff/SKILL.md +++ b/.github/skills/unattended-handoff/SKILL.md @@ -155,8 +155,8 @@ does not qualify, since skipping one costs nothing and a guess costs a revert an - **The fix stays inside this repository's tree.** It changes no repository setting, ruleset, visibility, secret, or release condition, and needs no credential, account, or host the session lacks. It needs no platform, in whole or in part, by the test `session-handoff` "The Chain" - states. Such an issue belongs to that platform's lane whatever host the session runs on. - Splitting off a platform part is a write the picker does not make. + states. A whole one belongs to that platform's lane whatever host the session runs on. A partial + one waits on the split that section describes, a write the picker does not make. - **The fix edits nothing under the hub's `host-setup/agent-safety/`.** That tree is the agent's own guard, and it is worked only in an attended session, so a human approves every change to it. - **It reverses no settled decision** recorded in an issue, a handoff, or the rule text. From 8c629b0bfdc51e316f8dcefdcb0a5b79df6f98ca Mon Sep 17 00:00:00 2001 From: Pieter Viljoen Date: Fri, 9 Oct 2026 10:45:55 -0700 Subject: [PATCH 10/13] Keep the Issue's Exceptions and Name Who Splits a Mixed Issue Systemd, apt, and bash scripts are not platform work outside the WSL cases, only pwsh keeps the Windows exception, the session finding a mixed issue splits it or names it, and a closed lane reopens with new. Co-Authored-By: Claude Opus 5.5 --- .agents/skills/backlog-burndown/SKILL.md | 2 +- .agents/skills/session-handoff/SKILL.md | 36 ++++++++++--------- .../.source-digests/backlog-burndown | 2 +- .../.source-digests/session-handoff | 2 +- .../skills/backlog-burndown/SKILL.md | 2 +- .../skills/session-handoff/SKILL.md | 36 ++++++++++--------- .github/skills/backlog-burndown/SKILL.md | 2 +- .github/skills/session-handoff/SKILL.md | 36 ++++++++++--------- 8 files changed, 65 insertions(+), 53 deletions(-) diff --git a/.agents/skills/backlog-burndown/SKILL.md b/.agents/skills/backlog-burndown/SKILL.md index b60e804d1..6af2eca2d 100644 --- a/.agents/skills/backlog-burndown/SKILL.md +++ b/.agents/skills/backlog-burndown/SKILL.md @@ -133,7 +133,7 @@ bodies, and a stuck issue nobody names reads as ordinary backlog that simply nev An issue that needs a platform, by the test `session-handoff` "The Chain" states, is counted and is not ranked. It belongs to that platform's lane, so this run gives it no group, no worker, and no claim. An issue only part of which needs a platform is held back the same way. It waits on the -split "The Chain" describes, which an attended session makes, and the narrowed issue is ranked once +split "The Chain" describes, which this run does not make, and the narrowed issue is ranked once that split lands. The round's report names each issue held back this way, its platform, and whether it waits on a split, as it names a `blocked` one. diff --git a/.agents/skills/session-handoff/SKILL.md b/.agents/skills/session-handoff/SKILL.md index 398c7cbf9..77a66b10d 100644 --- a/.agents/skills/session-handoff/SKILL.md +++ b/.agents/skills/session-handoff/SKILL.md @@ -62,22 +62,26 @@ without trusting the parts of it that have gone stale. - **One open handoff issue per track per repository.** A track is a short kebab-case slug naming a lane of work, and a session that names no track uses `default`. Parallel lanes each name their own, so each closes its own predecessor and neither reads the other's state as current. -- **A platform lane is for work that needs its platform.** A platform track takes an issue only - when its defect reproduces, or its fix can be verified, on that platform alone. It also needs - that no Linux host outside WSL can both fix the issue and verify the fix. An issue meeting both - goes to its platform's lane. Any other issue goes to the ordinary backlog, since a lane costs a - separate chain and a host-bound session. A defect in WSL interop, the `WSLInterop` binfmt - handler, `/mnt/` paths, or `wslpath` reproduces only inside WSL. So does running a Windows - `.exe` from Linux, although WSL runs on Windows. Behavior that differs under Windows PowerShell - 5.1 or `winget`, or in Windows path and ACL semantics, reproduces only on Windows. Either still - goes to the backlog where a Linux host outside WSL verifies its fix, as a plain unit test of a - path translation can. Systemd user scopes, apt, and bash or `pwsh` scripts in a Linux container - need a lane only where the defect depends on the platform. Where only part of an issue needs a - platform, each such part is filed as an issue of its own for its platform's lane. The original is - narrowed to the rest, or closed in favor of those issues where nothing is left. A platform lane - is closed out with no successor once none of its next steps needs its platform. Before that, each - remaining step with no issue of its own is filed as one. Its last link carries the outcome as a - comment, as `AGENTS.md` "Session Scope" closes a track whose work is complete. +- **A platform lane is for work that needs its platform.** A platform track takes an issue only when + its defect reproduces, or its fix can be verified, on that platform alone. It also needs that no + Linux host outside WSL can both fix the issue and verify the fix. An issue meeting both goes to + its platform's lane. Any other issue goes to the ordinary backlog, since a lane costs a separate + chain and a host-bound session. A defect in WSL interop, the `WSLInterop` binfmt handler, + `/mnt/` paths, or `wslpath` reproduces only inside WSL. So does running a Windows `.exe` + from Linux, although WSL runs on Windows. Behavior that differs under Windows PowerShell 5.1 or + `winget`, or in Windows path and ACL semantics, reproduces only on Windows. Either still goes to + the backlog where a Linux host outside WSL verifies its fix, as a plain unit test of a path + translation can. Systemd user scopes, apt, and bash scripts are not platform work, since a Linux + host verifies them, except in the WSL cases above. Nor is a `pwsh` script whose logic runs in a + Linux container, unless its defect depends on Windows itself. Where only part of an issue needs a + platform, the session finding it files each such part as its own issue for its platform's lane. + The original is narrowed to the rest, or closed in favor of those issues where nothing is left. A + session that may not write issues names the unsplit issue in its report or handoff instead. An + issue for a platform whose lane was closed out reopens that lane with `new`, which chains onto the + closed link. A platform lane is closed out with no successor once none of its next steps needs its + platform. Before that, each remaining step with no issue of its own is filed as one. Its last link + carries the outcome as a comment, as `AGENTS.md` "Session Scope" closes a track whose work is + complete. - **The title is for humans**, shaped `Session Handoff []: `, which `new` composes from the track and the subject it is given, so what a session writes is the subject alone. Nothing parses the title, so a maintainer is free to rename one. diff --git a/.claude-plugin/fleet-skills/.source-digests/backlog-burndown b/.claude-plugin/fleet-skills/.source-digests/backlog-burndown index cdcc6cbf4..57e5b1905 100644 --- a/.claude-plugin/fleet-skills/.source-digests/backlog-burndown +++ b/.claude-plugin/fleet-skills/.source-digests/backlog-burndown @@ -1 +1 @@ -3ab1990bcbe7c9cd +f9045d01bca0c44a diff --git a/.claude-plugin/fleet-skills/.source-digests/session-handoff b/.claude-plugin/fleet-skills/.source-digests/session-handoff index 6d54cb5f1..f9f256615 100644 --- a/.claude-plugin/fleet-skills/.source-digests/session-handoff +++ b/.claude-plugin/fleet-skills/.source-digests/session-handoff @@ -1 +1 @@ -3cd9007d63d09a80 +0060cacdea89ff32 diff --git a/.claude-plugin/fleet-skills/skills/backlog-burndown/SKILL.md b/.claude-plugin/fleet-skills/skills/backlog-burndown/SKILL.md index b60e804d1..6af2eca2d 100644 --- a/.claude-plugin/fleet-skills/skills/backlog-burndown/SKILL.md +++ b/.claude-plugin/fleet-skills/skills/backlog-burndown/SKILL.md @@ -133,7 +133,7 @@ bodies, and a stuck issue nobody names reads as ordinary backlog that simply nev An issue that needs a platform, by the test `session-handoff` "The Chain" states, is counted and is not ranked. It belongs to that platform's lane, so this run gives it no group, no worker, and no claim. An issue only part of which needs a platform is held back the same way. It waits on the -split "The Chain" describes, which an attended session makes, and the narrowed issue is ranked once +split "The Chain" describes, which this run does not make, and the narrowed issue is ranked once that split lands. The round's report names each issue held back this way, its platform, and whether it waits on a split, as it names a `blocked` one. diff --git a/.claude-plugin/fleet-skills/skills/session-handoff/SKILL.md b/.claude-plugin/fleet-skills/skills/session-handoff/SKILL.md index 398c7cbf9..77a66b10d 100644 --- a/.claude-plugin/fleet-skills/skills/session-handoff/SKILL.md +++ b/.claude-plugin/fleet-skills/skills/session-handoff/SKILL.md @@ -62,22 +62,26 @@ without trusting the parts of it that have gone stale. - **One open handoff issue per track per repository.** A track is a short kebab-case slug naming a lane of work, and a session that names no track uses `default`. Parallel lanes each name their own, so each closes its own predecessor and neither reads the other's state as current. -- **A platform lane is for work that needs its platform.** A platform track takes an issue only - when its defect reproduces, or its fix can be verified, on that platform alone. It also needs - that no Linux host outside WSL can both fix the issue and verify the fix. An issue meeting both - goes to its platform's lane. Any other issue goes to the ordinary backlog, since a lane costs a - separate chain and a host-bound session. A defect in WSL interop, the `WSLInterop` binfmt - handler, `/mnt/` paths, or `wslpath` reproduces only inside WSL. So does running a Windows - `.exe` from Linux, although WSL runs on Windows. Behavior that differs under Windows PowerShell - 5.1 or `winget`, or in Windows path and ACL semantics, reproduces only on Windows. Either still - goes to the backlog where a Linux host outside WSL verifies its fix, as a plain unit test of a - path translation can. Systemd user scopes, apt, and bash or `pwsh` scripts in a Linux container - need a lane only where the defect depends on the platform. Where only part of an issue needs a - platform, each such part is filed as an issue of its own for its platform's lane. The original is - narrowed to the rest, or closed in favor of those issues where nothing is left. A platform lane - is closed out with no successor once none of its next steps needs its platform. Before that, each - remaining step with no issue of its own is filed as one. Its last link carries the outcome as a - comment, as `AGENTS.md` "Session Scope" closes a track whose work is complete. +- **A platform lane is for work that needs its platform.** A platform track takes an issue only when + its defect reproduces, or its fix can be verified, on that platform alone. It also needs that no + Linux host outside WSL can both fix the issue and verify the fix. An issue meeting both goes to + its platform's lane. Any other issue goes to the ordinary backlog, since a lane costs a separate + chain and a host-bound session. A defect in WSL interop, the `WSLInterop` binfmt handler, + `/mnt/` paths, or `wslpath` reproduces only inside WSL. So does running a Windows `.exe` + from Linux, although WSL runs on Windows. Behavior that differs under Windows PowerShell 5.1 or + `winget`, or in Windows path and ACL semantics, reproduces only on Windows. Either still goes to + the backlog where a Linux host outside WSL verifies its fix, as a plain unit test of a path + translation can. Systemd user scopes, apt, and bash scripts are not platform work, since a Linux + host verifies them, except in the WSL cases above. Nor is a `pwsh` script whose logic runs in a + Linux container, unless its defect depends on Windows itself. Where only part of an issue needs a + platform, the session finding it files each such part as its own issue for its platform's lane. + The original is narrowed to the rest, or closed in favor of those issues where nothing is left. A + session that may not write issues names the unsplit issue in its report or handoff instead. An + issue for a platform whose lane was closed out reopens that lane with `new`, which chains onto the + closed link. A platform lane is closed out with no successor once none of its next steps needs its + platform. Before that, each remaining step with no issue of its own is filed as one. Its last link + carries the outcome as a comment, as `AGENTS.md` "Session Scope" closes a track whose work is + complete. - **The title is for humans**, shaped `Session Handoff []: `, which `new` composes from the track and the subject it is given, so what a session writes is the subject alone. Nothing parses the title, so a maintainer is free to rename one. diff --git a/.github/skills/backlog-burndown/SKILL.md b/.github/skills/backlog-burndown/SKILL.md index b60e804d1..6af2eca2d 100644 --- a/.github/skills/backlog-burndown/SKILL.md +++ b/.github/skills/backlog-burndown/SKILL.md @@ -133,7 +133,7 @@ bodies, and a stuck issue nobody names reads as ordinary backlog that simply nev An issue that needs a platform, by the test `session-handoff` "The Chain" states, is counted and is not ranked. It belongs to that platform's lane, so this run gives it no group, no worker, and no claim. An issue only part of which needs a platform is held back the same way. It waits on the -split "The Chain" describes, which an attended session makes, and the narrowed issue is ranked once +split "The Chain" describes, which this run does not make, and the narrowed issue is ranked once that split lands. The round's report names each issue held back this way, its platform, and whether it waits on a split, as it names a `blocked` one. diff --git a/.github/skills/session-handoff/SKILL.md b/.github/skills/session-handoff/SKILL.md index 398c7cbf9..77a66b10d 100644 --- a/.github/skills/session-handoff/SKILL.md +++ b/.github/skills/session-handoff/SKILL.md @@ -62,22 +62,26 @@ without trusting the parts of it that have gone stale. - **One open handoff issue per track per repository.** A track is a short kebab-case slug naming a lane of work, and a session that names no track uses `default`. Parallel lanes each name their own, so each closes its own predecessor and neither reads the other's state as current. -- **A platform lane is for work that needs its platform.** A platform track takes an issue only - when its defect reproduces, or its fix can be verified, on that platform alone. It also needs - that no Linux host outside WSL can both fix the issue and verify the fix. An issue meeting both - goes to its platform's lane. Any other issue goes to the ordinary backlog, since a lane costs a - separate chain and a host-bound session. A defect in WSL interop, the `WSLInterop` binfmt - handler, `/mnt/` paths, or `wslpath` reproduces only inside WSL. So does running a Windows - `.exe` from Linux, although WSL runs on Windows. Behavior that differs under Windows PowerShell - 5.1 or `winget`, or in Windows path and ACL semantics, reproduces only on Windows. Either still - goes to the backlog where a Linux host outside WSL verifies its fix, as a plain unit test of a - path translation can. Systemd user scopes, apt, and bash or `pwsh` scripts in a Linux container - need a lane only where the defect depends on the platform. Where only part of an issue needs a - platform, each such part is filed as an issue of its own for its platform's lane. The original is - narrowed to the rest, or closed in favor of those issues where nothing is left. A platform lane - is closed out with no successor once none of its next steps needs its platform. Before that, each - remaining step with no issue of its own is filed as one. Its last link carries the outcome as a - comment, as `AGENTS.md` "Session Scope" closes a track whose work is complete. +- **A platform lane is for work that needs its platform.** A platform track takes an issue only when + its defect reproduces, or its fix can be verified, on that platform alone. It also needs that no + Linux host outside WSL can both fix the issue and verify the fix. An issue meeting both goes to + its platform's lane. Any other issue goes to the ordinary backlog, since a lane costs a separate + chain and a host-bound session. A defect in WSL interop, the `WSLInterop` binfmt handler, + `/mnt/` paths, or `wslpath` reproduces only inside WSL. So does running a Windows `.exe` + from Linux, although WSL runs on Windows. Behavior that differs under Windows PowerShell 5.1 or + `winget`, or in Windows path and ACL semantics, reproduces only on Windows. Either still goes to + the backlog where a Linux host outside WSL verifies its fix, as a plain unit test of a path + translation can. Systemd user scopes, apt, and bash scripts are not platform work, since a Linux + host verifies them, except in the WSL cases above. Nor is a `pwsh` script whose logic runs in a + Linux container, unless its defect depends on Windows itself. Where only part of an issue needs a + platform, the session finding it files each such part as its own issue for its platform's lane. + The original is narrowed to the rest, or closed in favor of those issues where nothing is left. A + session that may not write issues names the unsplit issue in its report or handoff instead. An + issue for a platform whose lane was closed out reopens that lane with `new`, which chains onto the + closed link. A platform lane is closed out with no successor once none of its next steps needs its + platform. Before that, each remaining step with no issue of its own is filed as one. Its last link + carries the outcome as a comment, as `AGENTS.md` "Session Scope" closes a track whose work is + complete. - **The title is for humans**, shaped `Session Handoff []: `, which `new` composes from the track and the subject it is given, so what a session writes is the subject alone. Nothing parses the title, so a maintainer is free to rename one. From 7251c7ab9f23a726f52e18bf1611eb1d7897691b Mon Sep 17 00:00:00 2001 From: Pieter Viljoen Date: Fri, 9 Oct 2026 10:49:59 -0700 Subject: [PATCH 11/13] Make a Single-Platform Defect the Exception for Systemd, apt, and Bash The exception now covers a defect that reproduces on one platform alone, macOS included, rather than naming only the WSL cases. Co-Authored-By: Claude Opus 5.5 --- .agents/skills/session-handoff/SKILL.md | 20 +++++++++---------- .../.source-digests/session-handoff | 2 +- .../skills/session-handoff/SKILL.md | 20 +++++++++---------- .github/skills/session-handoff/SKILL.md | 20 +++++++++---------- 4 files changed, 31 insertions(+), 31 deletions(-) diff --git a/.agents/skills/session-handoff/SKILL.md b/.agents/skills/session-handoff/SKILL.md index 77a66b10d..78691ef1c 100644 --- a/.agents/skills/session-handoff/SKILL.md +++ b/.agents/skills/session-handoff/SKILL.md @@ -72,16 +72,16 @@ without trusting the parts of it that have gone stale. `winget`, or in Windows path and ACL semantics, reproduces only on Windows. Either still goes to the backlog where a Linux host outside WSL verifies its fix, as a plain unit test of a path translation can. Systemd user scopes, apt, and bash scripts are not platform work, since a Linux - host verifies them, except in the WSL cases above. Nor is a `pwsh` script whose logic runs in a - Linux container, unless its defect depends on Windows itself. Where only part of an issue needs a - platform, the session finding it files each such part as its own issue for its platform's lane. - The original is narrowed to the rest, or closed in favor of those issues where nothing is left. A - session that may not write issues names the unsplit issue in its report or handoff instead. An - issue for a platform whose lane was closed out reopens that lane with `new`, which chains onto the - closed link. A platform lane is closed out with no successor once none of its next steps needs its - platform. Before that, each remaining step with no issue of its own is filed as one. Its last link - carries the outcome as a comment, as `AGENTS.md` "Session Scope" closes a track whose work is - complete. + host verifies them. A defect in one that reproduces on one platform alone is the exception. Nor is + a `pwsh` script whose logic runs in a Linux container, unless its defect depends on Windows + itself. Where only part of an issue needs a platform, the session finding it files each such part + as its own issue for its platform's lane. The original is narrowed to the rest, or closed in favor + of those issues where nothing is left. A session that may not write issues names the unsplit issue + in its report or handoff instead. An issue for a platform whose lane was closed out reopens that + lane with `new`, which chains onto the closed link. A platform lane is closed out with no + successor once none of its next steps needs its platform. Before that, each remaining step with no + issue of its own is filed as one. Its last link carries the outcome as a comment, as `AGENTS.md` + "Session Scope" closes a track whose work is complete. - **The title is for humans**, shaped `Session Handoff []: `, which `new` composes from the track and the subject it is given, so what a session writes is the subject alone. Nothing parses the title, so a maintainer is free to rename one. diff --git a/.claude-plugin/fleet-skills/.source-digests/session-handoff b/.claude-plugin/fleet-skills/.source-digests/session-handoff index f9f256615..0a084b102 100644 --- a/.claude-plugin/fleet-skills/.source-digests/session-handoff +++ b/.claude-plugin/fleet-skills/.source-digests/session-handoff @@ -1 +1 @@ -0060cacdea89ff32 +d2b120528dd46f5b diff --git a/.claude-plugin/fleet-skills/skills/session-handoff/SKILL.md b/.claude-plugin/fleet-skills/skills/session-handoff/SKILL.md index 77a66b10d..78691ef1c 100644 --- a/.claude-plugin/fleet-skills/skills/session-handoff/SKILL.md +++ b/.claude-plugin/fleet-skills/skills/session-handoff/SKILL.md @@ -72,16 +72,16 @@ without trusting the parts of it that have gone stale. `winget`, or in Windows path and ACL semantics, reproduces only on Windows. Either still goes to the backlog where a Linux host outside WSL verifies its fix, as a plain unit test of a path translation can. Systemd user scopes, apt, and bash scripts are not platform work, since a Linux - host verifies them, except in the WSL cases above. Nor is a `pwsh` script whose logic runs in a - Linux container, unless its defect depends on Windows itself. Where only part of an issue needs a - platform, the session finding it files each such part as its own issue for its platform's lane. - The original is narrowed to the rest, or closed in favor of those issues where nothing is left. A - session that may not write issues names the unsplit issue in its report or handoff instead. An - issue for a platform whose lane was closed out reopens that lane with `new`, which chains onto the - closed link. A platform lane is closed out with no successor once none of its next steps needs its - platform. Before that, each remaining step with no issue of its own is filed as one. Its last link - carries the outcome as a comment, as `AGENTS.md` "Session Scope" closes a track whose work is - complete. + host verifies them. A defect in one that reproduces on one platform alone is the exception. Nor is + a `pwsh` script whose logic runs in a Linux container, unless its defect depends on Windows + itself. Where only part of an issue needs a platform, the session finding it files each such part + as its own issue for its platform's lane. The original is narrowed to the rest, or closed in favor + of those issues where nothing is left. A session that may not write issues names the unsplit issue + in its report or handoff instead. An issue for a platform whose lane was closed out reopens that + lane with `new`, which chains onto the closed link. A platform lane is closed out with no + successor once none of its next steps needs its platform. Before that, each remaining step with no + issue of its own is filed as one. Its last link carries the outcome as a comment, as `AGENTS.md` + "Session Scope" closes a track whose work is complete. - **The title is for humans**, shaped `Session Handoff []: `, which `new` composes from the track and the subject it is given, so what a session writes is the subject alone. Nothing parses the title, so a maintainer is free to rename one. diff --git a/.github/skills/session-handoff/SKILL.md b/.github/skills/session-handoff/SKILL.md index 77a66b10d..78691ef1c 100644 --- a/.github/skills/session-handoff/SKILL.md +++ b/.github/skills/session-handoff/SKILL.md @@ -72,16 +72,16 @@ without trusting the parts of it that have gone stale. `winget`, or in Windows path and ACL semantics, reproduces only on Windows. Either still goes to the backlog where a Linux host outside WSL verifies its fix, as a plain unit test of a path translation can. Systemd user scopes, apt, and bash scripts are not platform work, since a Linux - host verifies them, except in the WSL cases above. Nor is a `pwsh` script whose logic runs in a - Linux container, unless its defect depends on Windows itself. Where only part of an issue needs a - platform, the session finding it files each such part as its own issue for its platform's lane. - The original is narrowed to the rest, or closed in favor of those issues where nothing is left. A - session that may not write issues names the unsplit issue in its report or handoff instead. An - issue for a platform whose lane was closed out reopens that lane with `new`, which chains onto the - closed link. A platform lane is closed out with no successor once none of its next steps needs its - platform. Before that, each remaining step with no issue of its own is filed as one. Its last link - carries the outcome as a comment, as `AGENTS.md` "Session Scope" closes a track whose work is - complete. + host verifies them. A defect in one that reproduces on one platform alone is the exception. Nor is + a `pwsh` script whose logic runs in a Linux container, unless its defect depends on Windows + itself. Where only part of an issue needs a platform, the session finding it files each such part + as its own issue for its platform's lane. The original is narrowed to the rest, or closed in favor + of those issues where nothing is left. A session that may not write issues names the unsplit issue + in its report or handoff instead. An issue for a platform whose lane was closed out reopens that + lane with `new`, which chains onto the closed link. A platform lane is closed out with no + successor once none of its next steps needs its platform. Before that, each remaining step with no + issue of its own is filed as one. Its last link carries the outcome as a comment, as `AGENTS.md` + "Session Scope" closes a track whose work is complete. - **The title is for humans**, shaped `Session Handoff []: `, which `new` composes from the track and the subject it is given, so what a session writes is the subject alone. Nothing parses the title, so a maintainer is free to rename one. From c2bc6e268ec4e3d6cb60d4e97947359cae5310b1 Mon Sep 17 00:00:00 2001 From: Pieter Viljoen Date: Fri, 9 Oct 2026 10:53:40 -0700 Subject: [PATCH 12/13] Let the Two Conditions Decide Systemd, apt, and Script Issues The topic carve-outs for systemd, apt, bash, and pwsh dropped the second condition, so they are replaced by a sentence saying the two conditions decide those issues like any other. Co-Authored-By: Claude Opus 5.5 --- .agents/skills/session-handoff/SKILL.md | 21 +++++++++---------- .../.source-digests/session-handoff | 2 +- .../skills/session-handoff/SKILL.md | 21 +++++++++---------- .github/skills/session-handoff/SKILL.md | 21 +++++++++---------- 4 files changed, 31 insertions(+), 34 deletions(-) diff --git a/.agents/skills/session-handoff/SKILL.md b/.agents/skills/session-handoff/SKILL.md index 78691ef1c..13edc52b0 100644 --- a/.agents/skills/session-handoff/SKILL.md +++ b/.agents/skills/session-handoff/SKILL.md @@ -71,17 +71,16 @@ without trusting the parts of it that have gone stale. from Linux, although WSL runs on Windows. Behavior that differs under Windows PowerShell 5.1 or `winget`, or in Windows path and ACL semantics, reproduces only on Windows. Either still goes to the backlog where a Linux host outside WSL verifies its fix, as a plain unit test of a path - translation can. Systemd user scopes, apt, and bash scripts are not platform work, since a Linux - host verifies them. A defect in one that reproduces on one platform alone is the exception. Nor is - a `pwsh` script whose logic runs in a Linux container, unless its defect depends on Windows - itself. Where only part of an issue needs a platform, the session finding it files each such part - as its own issue for its platform's lane. The original is narrowed to the rest, or closed in favor - of those issues where nothing is left. A session that may not write issues names the unsplit issue - in its report or handoff instead. An issue for a platform whose lane was closed out reopens that - lane with `new`, which chains onto the closed link. A platform lane is closed out with no - successor once none of its next steps needs its platform. Before that, each remaining step with no - issue of its own is filed as one. Its last link carries the outcome as a comment, as `AGENTS.md` - "Session Scope" closes a track whose work is complete. + translation can. An issue in systemd user scopes, apt, a bash script, or a `pwsh` script run in a + Linux container gets no lane by its topic. The two conditions decide it like any other issue. + Where only part of an issue needs a platform, the session finding it files each such part as its + own issue for its platform's lane. The original is narrowed to the rest, or closed in favor of + those issues where nothing is left. A session that may not write issues names the unsplit issue in + its report or handoff instead. An issue for a platform whose lane was closed out reopens that lane + with `new`, which chains onto the closed link. A platform lane is closed out with no successor + once none of its next steps needs its platform. Before that, each remaining step with no issue of + its own is filed as one. Its last link carries the outcome as a comment, as `AGENTS.md` "Session + Scope" closes a track whose work is complete. - **The title is for humans**, shaped `Session Handoff []: `, which `new` composes from the track and the subject it is given, so what a session writes is the subject alone. Nothing parses the title, so a maintainer is free to rename one. diff --git a/.claude-plugin/fleet-skills/.source-digests/session-handoff b/.claude-plugin/fleet-skills/.source-digests/session-handoff index 0a084b102..0498b46e2 100644 --- a/.claude-plugin/fleet-skills/.source-digests/session-handoff +++ b/.claude-plugin/fleet-skills/.source-digests/session-handoff @@ -1 +1 @@ -d2b120528dd46f5b +0d1081b7337a929e diff --git a/.claude-plugin/fleet-skills/skills/session-handoff/SKILL.md b/.claude-plugin/fleet-skills/skills/session-handoff/SKILL.md index 78691ef1c..13edc52b0 100644 --- a/.claude-plugin/fleet-skills/skills/session-handoff/SKILL.md +++ b/.claude-plugin/fleet-skills/skills/session-handoff/SKILL.md @@ -71,17 +71,16 @@ without trusting the parts of it that have gone stale. from Linux, although WSL runs on Windows. Behavior that differs under Windows PowerShell 5.1 or `winget`, or in Windows path and ACL semantics, reproduces only on Windows. Either still goes to the backlog where a Linux host outside WSL verifies its fix, as a plain unit test of a path - translation can. Systemd user scopes, apt, and bash scripts are not platform work, since a Linux - host verifies them. A defect in one that reproduces on one platform alone is the exception. Nor is - a `pwsh` script whose logic runs in a Linux container, unless its defect depends on Windows - itself. Where only part of an issue needs a platform, the session finding it files each such part - as its own issue for its platform's lane. The original is narrowed to the rest, or closed in favor - of those issues where nothing is left. A session that may not write issues names the unsplit issue - in its report or handoff instead. An issue for a platform whose lane was closed out reopens that - lane with `new`, which chains onto the closed link. A platform lane is closed out with no - successor once none of its next steps needs its platform. Before that, each remaining step with no - issue of its own is filed as one. Its last link carries the outcome as a comment, as `AGENTS.md` - "Session Scope" closes a track whose work is complete. + translation can. An issue in systemd user scopes, apt, a bash script, or a `pwsh` script run in a + Linux container gets no lane by its topic. The two conditions decide it like any other issue. + Where only part of an issue needs a platform, the session finding it files each such part as its + own issue for its platform's lane. The original is narrowed to the rest, or closed in favor of + those issues where nothing is left. A session that may not write issues names the unsplit issue in + its report or handoff instead. An issue for a platform whose lane was closed out reopens that lane + with `new`, which chains onto the closed link. A platform lane is closed out with no successor + once none of its next steps needs its platform. Before that, each remaining step with no issue of + its own is filed as one. Its last link carries the outcome as a comment, as `AGENTS.md` "Session + Scope" closes a track whose work is complete. - **The title is for humans**, shaped `Session Handoff []: `, which `new` composes from the track and the subject it is given, so what a session writes is the subject alone. Nothing parses the title, so a maintainer is free to rename one. diff --git a/.github/skills/session-handoff/SKILL.md b/.github/skills/session-handoff/SKILL.md index 78691ef1c..13edc52b0 100644 --- a/.github/skills/session-handoff/SKILL.md +++ b/.github/skills/session-handoff/SKILL.md @@ -71,17 +71,16 @@ without trusting the parts of it that have gone stale. from Linux, although WSL runs on Windows. Behavior that differs under Windows PowerShell 5.1 or `winget`, or in Windows path and ACL semantics, reproduces only on Windows. Either still goes to the backlog where a Linux host outside WSL verifies its fix, as a plain unit test of a path - translation can. Systemd user scopes, apt, and bash scripts are not platform work, since a Linux - host verifies them. A defect in one that reproduces on one platform alone is the exception. Nor is - a `pwsh` script whose logic runs in a Linux container, unless its defect depends on Windows - itself. Where only part of an issue needs a platform, the session finding it files each such part - as its own issue for its platform's lane. The original is narrowed to the rest, or closed in favor - of those issues where nothing is left. A session that may not write issues names the unsplit issue - in its report or handoff instead. An issue for a platform whose lane was closed out reopens that - lane with `new`, which chains onto the closed link. A platform lane is closed out with no - successor once none of its next steps needs its platform. Before that, each remaining step with no - issue of its own is filed as one. Its last link carries the outcome as a comment, as `AGENTS.md` - "Session Scope" closes a track whose work is complete. + translation can. An issue in systemd user scopes, apt, a bash script, or a `pwsh` script run in a + Linux container gets no lane by its topic. The two conditions decide it like any other issue. + Where only part of an issue needs a platform, the session finding it files each such part as its + own issue for its platform's lane. The original is narrowed to the rest, or closed in favor of + those issues where nothing is left. A session that may not write issues names the unsplit issue in + its report or handoff instead. An issue for a platform whose lane was closed out reopens that lane + with `new`, which chains onto the closed link. A platform lane is closed out with no successor + once none of its next steps needs its platform. Before that, each remaining step with no issue of + its own is filed as one. Its last link carries the outcome as a comment, as `AGENTS.md` "Session + Scope" closes a track whose work is complete. - **The title is for humans**, shaped `Session Handoff []: `, which `new` composes from the track and the subject it is given, so what a session writes is the subject alone. Nothing parses the title, so a maintainer is free to rename one. From bbd75521635c4962163dbf1f831c506e79273b00 Mon Sep 17 00:00:00 2001 From: Pieter Viljoen Date: Fri, 9 Oct 2026 10:58:18 -0700 Subject: [PATCH 13/13] Define a Platform Track and Fix Two Antecedents The bullet now says a platform track is one kept for a single host platform, the close-out comment goes on the lane's last link, and the Auto-Resolvable sentences name the issue rather than the fix. Co-Authored-By: Claude Opus 5.5 --- .agents/skills/session-handoff/SKILL.md | 39 ++++++++++--------- .agents/skills/unattended-handoff/SKILL.md | 7 ++-- .../.source-digests/session-handoff | 2 +- .../.source-digests/unattended-handoff | 2 +- .../skills/session-handoff/SKILL.md | 39 ++++++++++--------- .../skills/unattended-handoff/SKILL.md | 7 ++-- .github/skills/session-handoff/SKILL.md | 39 ++++++++++--------- .github/skills/unattended-handoff/SKILL.md | 7 ++-- 8 files changed, 74 insertions(+), 68 deletions(-) diff --git a/.agents/skills/session-handoff/SKILL.md b/.agents/skills/session-handoff/SKILL.md index 13edc52b0..55895d2e2 100644 --- a/.agents/skills/session-handoff/SKILL.md +++ b/.agents/skills/session-handoff/SKILL.md @@ -62,25 +62,26 @@ without trusting the parts of it that have gone stale. - **One open handoff issue per track per repository.** A track is a short kebab-case slug naming a lane of work, and a session that names no track uses `default`. Parallel lanes each name their own, so each closes its own predecessor and neither reads the other's state as current. -- **A platform lane is for work that needs its platform.** A platform track takes an issue only when - its defect reproduces, or its fix can be verified, on that platform alone. It also needs that no - Linux host outside WSL can both fix the issue and verify the fix. An issue meeting both goes to - its platform's lane. Any other issue goes to the ordinary backlog, since a lane costs a separate - chain and a host-bound session. A defect in WSL interop, the `WSLInterop` binfmt handler, - `/mnt/` paths, or `wslpath` reproduces only inside WSL. So does running a Windows `.exe` - from Linux, although WSL runs on Windows. Behavior that differs under Windows PowerShell 5.1 or - `winget`, or in Windows path and ACL semantics, reproduces only on Windows. Either still goes to - the backlog where a Linux host outside WSL verifies its fix, as a plain unit test of a path - translation can. An issue in systemd user scopes, apt, a bash script, or a `pwsh` script run in a - Linux container gets no lane by its topic. The two conditions decide it like any other issue. - Where only part of an issue needs a platform, the session finding it files each such part as its - own issue for its platform's lane. The original is narrowed to the rest, or closed in favor of - those issues where nothing is left. A session that may not write issues names the unsplit issue in - its report or handoff instead. An issue for a platform whose lane was closed out reopens that lane - with `new`, which chains onto the closed link. A platform lane is closed out with no successor - once none of its next steps needs its platform. Before that, each remaining step with no issue of - its own is filed as one. Its last link carries the outcome as a comment, as `AGENTS.md` "Session - Scope" closes a track whose work is complete. +- **A platform lane is for work that needs its platform.** A platform track is one kept for a single + host platform, such as `wsl` or `windows`. It takes an issue only when its defect reproduces, or + its fix can be verified, on that platform alone. It also needs that no Linux host outside WSL can + both fix the issue and verify the fix. An issue meeting both goes to its platform's lane. Any + other issue goes to the ordinary backlog, since a lane costs a separate chain and a host-bound + session. A defect in WSL interop, the `WSLInterop` binfmt handler, `/mnt/` paths, or + `wslpath` reproduces only inside WSL. So does running a Windows `.exe` from Linux, although WSL + runs on Windows. Behavior that differs under Windows PowerShell 5.1 or `winget`, or in Windows + path and ACL semantics, reproduces only on Windows. Either still goes to the backlog where a Linux + host outside WSL verifies its fix, as a plain unit test of a path translation can. An issue in + systemd user scopes, apt, a bash script, or a `pwsh` script run in a Linux container gets no lane + by its topic. The two conditions decide it like any other issue. Where only part of an issue needs + a platform, the session finding it files each such part as its own issue for its platform's lane. + The original is narrowed to the rest, or closed in favor of those issues where nothing is left. A + session that may not write issues names the unsplit issue in its report or handoff instead. An + issue for a platform whose lane was closed out reopens that lane with `new`, which chains onto the + closed link. A platform lane is closed out with no successor once none of its next steps needs its + platform. Before that, each remaining step with no issue of its own is filed as one. The lane's + last link carries the outcome as a comment, as `AGENTS.md` "Session Scope" closes a track whose + work is complete. - **The title is for humans**, shaped `Session Handoff []: `, which `new` composes from the track and the subject it is given, so what a session writes is the subject alone. Nothing parses the title, so a maintainer is free to rename one. diff --git a/.agents/skills/unattended-handoff/SKILL.md b/.agents/skills/unattended-handoff/SKILL.md index fdb602486..4094aecbc 100644 --- a/.agents/skills/unattended-handoff/SKILL.md +++ b/.agents/skills/unattended-handoff/SKILL.md @@ -154,9 +154,10 @@ does not qualify, since skipping one costs nothing and a guess costs a revert an and no comment asks the maintainer something still unanswered. - **The fix stays inside this repository's tree.** It changes no repository setting, ruleset, visibility, secret, or release condition, and needs no credential, account, or host the session - lacks. It needs no platform, in whole or in part, by the test `session-handoff` "The Chain" - states. A whole one belongs to that platform's lane whatever host the session runs on. A partial - one waits on the split that section describes, a write the picker does not make. + lacks. The issue needs no platform, in whole or in part, by the test `session-handoff` "The + Chain" states. An issue that wholly needs a platform belongs to that platform's lane whatever host + the session runs on. One that partly needs it waits on the split that section describes, a write + the picker does not make. - **The fix edits nothing under the hub's `host-setup/agent-safety/`.** That tree is the agent's own guard, and it is worked only in an attended session, so a human approves every change to it. - **It reverses no settled decision** recorded in an issue, a handoff, or the rule text. diff --git a/.claude-plugin/fleet-skills/.source-digests/session-handoff b/.claude-plugin/fleet-skills/.source-digests/session-handoff index 0498b46e2..8fbedf923 100644 --- a/.claude-plugin/fleet-skills/.source-digests/session-handoff +++ b/.claude-plugin/fleet-skills/.source-digests/session-handoff @@ -1 +1 @@ -0d1081b7337a929e +2c0a84e0767fc97c diff --git a/.claude-plugin/fleet-skills/.source-digests/unattended-handoff b/.claude-plugin/fleet-skills/.source-digests/unattended-handoff index 93a1ab4fc..6512a3832 100644 --- a/.claude-plugin/fleet-skills/.source-digests/unattended-handoff +++ b/.claude-plugin/fleet-skills/.source-digests/unattended-handoff @@ -1 +1 @@ -552e1b27e648a77e +06ef313c4d01b168 diff --git a/.claude-plugin/fleet-skills/skills/session-handoff/SKILL.md b/.claude-plugin/fleet-skills/skills/session-handoff/SKILL.md index 13edc52b0..55895d2e2 100644 --- a/.claude-plugin/fleet-skills/skills/session-handoff/SKILL.md +++ b/.claude-plugin/fleet-skills/skills/session-handoff/SKILL.md @@ -62,25 +62,26 @@ without trusting the parts of it that have gone stale. - **One open handoff issue per track per repository.** A track is a short kebab-case slug naming a lane of work, and a session that names no track uses `default`. Parallel lanes each name their own, so each closes its own predecessor and neither reads the other's state as current. -- **A platform lane is for work that needs its platform.** A platform track takes an issue only when - its defect reproduces, or its fix can be verified, on that platform alone. It also needs that no - Linux host outside WSL can both fix the issue and verify the fix. An issue meeting both goes to - its platform's lane. Any other issue goes to the ordinary backlog, since a lane costs a separate - chain and a host-bound session. A defect in WSL interop, the `WSLInterop` binfmt handler, - `/mnt/` paths, or `wslpath` reproduces only inside WSL. So does running a Windows `.exe` - from Linux, although WSL runs on Windows. Behavior that differs under Windows PowerShell 5.1 or - `winget`, or in Windows path and ACL semantics, reproduces only on Windows. Either still goes to - the backlog where a Linux host outside WSL verifies its fix, as a plain unit test of a path - translation can. An issue in systemd user scopes, apt, a bash script, or a `pwsh` script run in a - Linux container gets no lane by its topic. The two conditions decide it like any other issue. - Where only part of an issue needs a platform, the session finding it files each such part as its - own issue for its platform's lane. The original is narrowed to the rest, or closed in favor of - those issues where nothing is left. A session that may not write issues names the unsplit issue in - its report or handoff instead. An issue for a platform whose lane was closed out reopens that lane - with `new`, which chains onto the closed link. A platform lane is closed out with no successor - once none of its next steps needs its platform. Before that, each remaining step with no issue of - its own is filed as one. Its last link carries the outcome as a comment, as `AGENTS.md` "Session - Scope" closes a track whose work is complete. +- **A platform lane is for work that needs its platform.** A platform track is one kept for a single + host platform, such as `wsl` or `windows`. It takes an issue only when its defect reproduces, or + its fix can be verified, on that platform alone. It also needs that no Linux host outside WSL can + both fix the issue and verify the fix. An issue meeting both goes to its platform's lane. Any + other issue goes to the ordinary backlog, since a lane costs a separate chain and a host-bound + session. A defect in WSL interop, the `WSLInterop` binfmt handler, `/mnt/` paths, or + `wslpath` reproduces only inside WSL. So does running a Windows `.exe` from Linux, although WSL + runs on Windows. Behavior that differs under Windows PowerShell 5.1 or `winget`, or in Windows + path and ACL semantics, reproduces only on Windows. Either still goes to the backlog where a Linux + host outside WSL verifies its fix, as a plain unit test of a path translation can. An issue in + systemd user scopes, apt, a bash script, or a `pwsh` script run in a Linux container gets no lane + by its topic. The two conditions decide it like any other issue. Where only part of an issue needs + a platform, the session finding it files each such part as its own issue for its platform's lane. + The original is narrowed to the rest, or closed in favor of those issues where nothing is left. A + session that may not write issues names the unsplit issue in its report or handoff instead. An + issue for a platform whose lane was closed out reopens that lane with `new`, which chains onto the + closed link. A platform lane is closed out with no successor once none of its next steps needs its + platform. Before that, each remaining step with no issue of its own is filed as one. The lane's + last link carries the outcome as a comment, as `AGENTS.md` "Session Scope" closes a track whose + work is complete. - **The title is for humans**, shaped `Session Handoff []: `, which `new` composes from the track and the subject it is given, so what a session writes is the subject alone. Nothing parses the title, so a maintainer is free to rename one. diff --git a/.claude-plugin/fleet-skills/skills/unattended-handoff/SKILL.md b/.claude-plugin/fleet-skills/skills/unattended-handoff/SKILL.md index fdb602486..4094aecbc 100644 --- a/.claude-plugin/fleet-skills/skills/unattended-handoff/SKILL.md +++ b/.claude-plugin/fleet-skills/skills/unattended-handoff/SKILL.md @@ -154,9 +154,10 @@ does not qualify, since skipping one costs nothing and a guess costs a revert an and no comment asks the maintainer something still unanswered. - **The fix stays inside this repository's tree.** It changes no repository setting, ruleset, visibility, secret, or release condition, and needs no credential, account, or host the session - lacks. It needs no platform, in whole or in part, by the test `session-handoff` "The Chain" - states. A whole one belongs to that platform's lane whatever host the session runs on. A partial - one waits on the split that section describes, a write the picker does not make. + lacks. The issue needs no platform, in whole or in part, by the test `session-handoff` "The + Chain" states. An issue that wholly needs a platform belongs to that platform's lane whatever host + the session runs on. One that partly needs it waits on the split that section describes, a write + the picker does not make. - **The fix edits nothing under the hub's `host-setup/agent-safety/`.** That tree is the agent's own guard, and it is worked only in an attended session, so a human approves every change to it. - **It reverses no settled decision** recorded in an issue, a handoff, or the rule text. diff --git a/.github/skills/session-handoff/SKILL.md b/.github/skills/session-handoff/SKILL.md index 13edc52b0..55895d2e2 100644 --- a/.github/skills/session-handoff/SKILL.md +++ b/.github/skills/session-handoff/SKILL.md @@ -62,25 +62,26 @@ without trusting the parts of it that have gone stale. - **One open handoff issue per track per repository.** A track is a short kebab-case slug naming a lane of work, and a session that names no track uses `default`. Parallel lanes each name their own, so each closes its own predecessor and neither reads the other's state as current. -- **A platform lane is for work that needs its platform.** A platform track takes an issue only when - its defect reproduces, or its fix can be verified, on that platform alone. It also needs that no - Linux host outside WSL can both fix the issue and verify the fix. An issue meeting both goes to - its platform's lane. Any other issue goes to the ordinary backlog, since a lane costs a separate - chain and a host-bound session. A defect in WSL interop, the `WSLInterop` binfmt handler, - `/mnt/` paths, or `wslpath` reproduces only inside WSL. So does running a Windows `.exe` - from Linux, although WSL runs on Windows. Behavior that differs under Windows PowerShell 5.1 or - `winget`, or in Windows path and ACL semantics, reproduces only on Windows. Either still goes to - the backlog where a Linux host outside WSL verifies its fix, as a plain unit test of a path - translation can. An issue in systemd user scopes, apt, a bash script, or a `pwsh` script run in a - Linux container gets no lane by its topic. The two conditions decide it like any other issue. - Where only part of an issue needs a platform, the session finding it files each such part as its - own issue for its platform's lane. The original is narrowed to the rest, or closed in favor of - those issues where nothing is left. A session that may not write issues names the unsplit issue in - its report or handoff instead. An issue for a platform whose lane was closed out reopens that lane - with `new`, which chains onto the closed link. A platform lane is closed out with no successor - once none of its next steps needs its platform. Before that, each remaining step with no issue of - its own is filed as one. Its last link carries the outcome as a comment, as `AGENTS.md` "Session - Scope" closes a track whose work is complete. +- **A platform lane is for work that needs its platform.** A platform track is one kept for a single + host platform, such as `wsl` or `windows`. It takes an issue only when its defect reproduces, or + its fix can be verified, on that platform alone. It also needs that no Linux host outside WSL can + both fix the issue and verify the fix. An issue meeting both goes to its platform's lane. Any + other issue goes to the ordinary backlog, since a lane costs a separate chain and a host-bound + session. A defect in WSL interop, the `WSLInterop` binfmt handler, `/mnt/` paths, or + `wslpath` reproduces only inside WSL. So does running a Windows `.exe` from Linux, although WSL + runs on Windows. Behavior that differs under Windows PowerShell 5.1 or `winget`, or in Windows + path and ACL semantics, reproduces only on Windows. Either still goes to the backlog where a Linux + host outside WSL verifies its fix, as a plain unit test of a path translation can. An issue in + systemd user scopes, apt, a bash script, or a `pwsh` script run in a Linux container gets no lane + by its topic. The two conditions decide it like any other issue. Where only part of an issue needs + a platform, the session finding it files each such part as its own issue for its platform's lane. + The original is narrowed to the rest, or closed in favor of those issues where nothing is left. A + session that may not write issues names the unsplit issue in its report or handoff instead. An + issue for a platform whose lane was closed out reopens that lane with `new`, which chains onto the + closed link. A platform lane is closed out with no successor once none of its next steps needs its + platform. Before that, each remaining step with no issue of its own is filed as one. The lane's + last link carries the outcome as a comment, as `AGENTS.md` "Session Scope" closes a track whose + work is complete. - **The title is for humans**, shaped `Session Handoff []: `, which `new` composes from the track and the subject it is given, so what a session writes is the subject alone. Nothing parses the title, so a maintainer is free to rename one. diff --git a/.github/skills/unattended-handoff/SKILL.md b/.github/skills/unattended-handoff/SKILL.md index fdb602486..4094aecbc 100644 --- a/.github/skills/unattended-handoff/SKILL.md +++ b/.github/skills/unattended-handoff/SKILL.md @@ -154,9 +154,10 @@ does not qualify, since skipping one costs nothing and a guess costs a revert an and no comment asks the maintainer something still unanswered. - **The fix stays inside this repository's tree.** It changes no repository setting, ruleset, visibility, secret, or release condition, and needs no credential, account, or host the session - lacks. It needs no platform, in whole or in part, by the test `session-handoff` "The Chain" - states. A whole one belongs to that platform's lane whatever host the session runs on. A partial - one waits on the split that section describes, a write the picker does not make. + lacks. The issue needs no platform, in whole or in part, by the test `session-handoff` "The + Chain" states. An issue that wholly needs a platform belongs to that platform's lane whatever host + the session runs on. One that partly needs it waits on the split that section describes, a write + the picker does not make. - **The fix edits nothing under the hub's `host-setup/agent-safety/`.** That tree is the agent's own guard, and it is worked only in an attended session, so a human approves every change to it. - **It reverses no settled decision** recorded in an issue, a handoff, or the rule text.