8.2.25 The workflow on the GitHub Copilot app, agreed 31 October 2026
8.2.25 The workflow on the GitHub Copilot app, agreed 31 October 2026¶
Rulings by the author on 31 October 2026, outside the package sequence and beside Phase 4's close.
The plan docs/plans/copilot-host.md carried three decisions the author had made before it was
written, the host, the division of work and CI, and was amended after an adversarial review in the
Copilot app. Three more were put to the author while the plan was implemented, from a Copilot app
session opened on the checkout's \\wsl.localhost\ path, the plan's unsupported fallback, in which
no repository hook fires: whether to build before the plan's Phase 0 probes could run, whether
Copilot needs generated copies of the rules and agents, and which letters this record takes. The
author ruled each. The letter series continues at AA, the first pair after Z; clause.py and
duplicates.py take a letter pair from this record.
| # | Decision | Consequence | Clause changed, and when |
|---|---|---|---|
| AA1 | The workflow runs on Claude Code and on the GitHub Copilot app, and either runs any step on either lane. .claude/ stays the single source: Copilot reads CLAUDE.md, the rules, the agents, the skills and the hooks of .claude/settings.json from it, and adds only .github/copilot-instructions.md and .github/hooks/nanopnp.json. .claude/workflow/hosts.md maps each Claude Code construct the workflow names to its Copilot substitute |
Nothing of the workflow is written twice, so a change to a skill or a rule reaches both hosts. A construct with no Copilot substitute, the artifact tools of np-gui publish and collect, stays on Claude Code |
§8.4.4, in this commit |
| AA2 | Copilot runs on Windows with the checkout opened in WSL as a WSL host. The Linux AppImage in WSLg and the native app on a \\wsl.localhost\ path are not supported for gated work |
On a WSL host the agent's shell and every hook run in Linux, as on Claude Code. On the \\wsl.localhost\ path the session is a folder with no hooks, so both gates of CLAUDE.md's Commands are run by hand in WSL |
§8.4.4 and .claude/workflow/hosts.md, in this commit |
| AA3 | On Copilot, /np-ship pushes, writes the checkpoint into the pull request, reports the automation limit and stops, rather than waiting on CI. The app's agent merge stays off on nanopnp pull requests |
np-ship/wp.md §0 resumes when CI ends, and the steward's failure classes stay the only rule for fixing CI. A scheduled wake through a session automation is the later upgrade |
§8.4.4, in this commit |
| AA4 | One host drives a branch at a time, named host: claude-code or host: copilot in the lane line of docs/plans/current.md and in the pull request's checkpoint. The hosts never share a working tree, and the fresh-session rule of §8.4.4 is per session, not per host |
Concurrency needs no new mechanism: the two-lane cap, the renumbering after a second-lane merge and duplicates.py already cover it. Shipping on the other host gives an independent review and is encouraged, not required |
§8.4.4, in this commit |
| AA5 | The gate refuses with exit 2, its reason on standard error and a top-level permissionDecision beside hookSpecificOutput, a form both hosts document. A git pre-push hook, .githooks/pre-push through gate.sh check-push, refuses a push whose tree has no push stamp once the clone sets core.hooksPath |
The refusal lands on Copilot, which does not document hookSpecificOutput with exit 0, and the app's Commit and Push buttons, which run git's hooks and no agent hook, cannot push an ungated tree. write_bash is gated through .agents/hooks/adapter.sh, and the GitHub MCP write tools are refused on both hosts |
§8.4.2, in this commit |
| AA6 | The setup is built before the plan's Phase 0 probes ran. Each probe not run is an open item: REV-166 the hook probes, REV-167 the app's behaviour, REV-168 the live verification | Until REV-166 is closed, the gate is run by hand before each commit and push on Copilot. A probe that fails brings back the plan's stop rule: Copilot commits nothing on this project until it is fixed | REV-166 to REV-168, in this commit |
| AA7 | The model tiers of §8.4.5 are the same Claude models on either host. .claude/workflow/hosts.md gives each tier's Copilot id and each agent's effort, and Copilot passes model and reasoning_effort at each task call |
A plan's named executor means the same model whichever host runs it. An id missing from the author's Copilot plan is replaced by the nearest of the same tier, and the session says so | §8.4.5, in this commit |
| AA8 | No Copilot file is generated. The plan's copilot_sync.py, .github/instructions/ and .github/agents/ are not written: the app reads .claude/rules/, .claude/agents/ and .claude/skills/ itself |
No generated copy can drift, and session start runs no check for one. How Copilot treats model:, effort: and omitClaudeMd in an agent file is REV-167 |
None; the plan's Phases 1 and 2 and .claude/workflow/hosts.md, in this commit |