diff --git a/.agents/skills/backlog-burndown/SKILL.md b/.agents/skills/backlog-burndown/SKILL.md index f6dca29f0..6af2eca2d 100644 --- a/.agents/skills/backlog-burndown/SKILL.md +++ b/.agents/skills/backlog-burndown/SKILL.md @@ -130,6 +130,13 @@ 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, 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 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. + 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 b84ad5f50..55895d2e2 100644 --- a/.agents/skills/session-handoff/SKILL.md +++ b/.agents/skills/session-handoff/SKILL.md @@ -62,6 +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 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 dc6af99c1..4094aecbc 100644 --- a/.agents/skills/unattended-handoff/SKILL.md +++ b/.agents/skills/unattended-handoff/SKILL.md @@ -154,7 +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. + 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/backlog-burndown b/.claude-plugin/fleet-skills/.source-digests/backlog-burndown index 17c143684..57e5b1905 100644 --- a/.claude-plugin/fleet-skills/.source-digests/backlog-burndown +++ b/.claude-plugin/fleet-skills/.source-digests/backlog-burndown @@ -1 +1 @@ -a44167992b6a50fe +f9045d01bca0c44a diff --git a/.claude-plugin/fleet-skills/.source-digests/session-handoff b/.claude-plugin/fleet-skills/.source-digests/session-handoff index 6d54cf547..8fbedf923 100644 --- a/.claude-plugin/fleet-skills/.source-digests/session-handoff +++ b/.claude-plugin/fleet-skills/.source-digests/session-handoff @@ -1 +1 @@ -71ea890bf0050608 +2c0a84e0767fc97c diff --git a/.claude-plugin/fleet-skills/.source-digests/unattended-handoff b/.claude-plugin/fleet-skills/.source-digests/unattended-handoff index 6efa07914..6512a3832 100644 --- a/.claude-plugin/fleet-skills/.source-digests/unattended-handoff +++ b/.claude-plugin/fleet-skills/.source-digests/unattended-handoff @@ -1 +1 @@ -edad0bee58257e24 +06ef313c4d01b168 diff --git a/.claude-plugin/fleet-skills/skills/backlog-burndown/SKILL.md b/.claude-plugin/fleet-skills/skills/backlog-burndown/SKILL.md index f6dca29f0..6af2eca2d 100644 --- a/.claude-plugin/fleet-skills/skills/backlog-burndown/SKILL.md +++ b/.claude-plugin/fleet-skills/skills/backlog-burndown/SKILL.md @@ -130,6 +130,13 @@ 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, 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 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. + 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 b84ad5f50..55895d2e2 100644 --- a/.claude-plugin/fleet-skills/skills/session-handoff/SKILL.md +++ b/.claude-plugin/fleet-skills/skills/session-handoff/SKILL.md @@ -62,6 +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 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 dc6af99c1..4094aecbc 100644 --- a/.claude-plugin/fleet-skills/skills/unattended-handoff/SKILL.md +++ b/.claude-plugin/fleet-skills/skills/unattended-handoff/SKILL.md @@ -154,7 +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. + 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/backlog-burndown/SKILL.md b/.github/skills/backlog-burndown/SKILL.md index f6dca29f0..6af2eca2d 100644 --- a/.github/skills/backlog-burndown/SKILL.md +++ b/.github/skills/backlog-burndown/SKILL.md @@ -130,6 +130,13 @@ 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, 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 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. + 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 b84ad5f50..55895d2e2 100644 --- a/.github/skills/session-handoff/SKILL.md +++ b/.github/skills/session-handoff/SKILL.md @@ -62,6 +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 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 dc6af99c1..4094aecbc 100644 --- a/.github/skills/unattended-handoff/SKILL.md +++ b/.github/skills/unattended-handoff/SKILL.md @@ -154,7 +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. + 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.