@outerlayer/cli 0.8.0 → 0.8.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/README.md +27 -9
  3. package/dist/{agent-setup-C7PLRXZO.js → agent-setup-C5X4356W.js} +10 -10
  4. package/dist/{build-MS34XEGN.js → build-3FSJR5OO.js} +1 -1
  5. package/dist/build-info.json +1 -1
  6. package/dist/{builder-G52A6GW2.js → builder-QZA2Z3M3.js} +3 -3
  7. package/dist/{check-FOF3PUKI.js → check-HQHFAOXW.js} +30 -29
  8. package/dist/{chunk-R7STSBLC.js → chunk-2E2MG3KW.js} +1 -1
  9. package/dist/{chunk-OD2VTIHN.js → chunk-2FWL7CE2.js} +3 -2
  10. package/dist/{chunk-K35RW5HP.js → chunk-33GOCSRO.js} +4 -4
  11. package/dist/{chunk-4A5E2G4E.js → chunk-3J476JZC.js} +11 -11
  12. package/dist/{chunk-MQ3IPHIZ.js → chunk-47RS42OZ.js} +6 -3
  13. package/dist/{chunk-3S4P55NE.js → chunk-4ZZR5SKG.js} +3 -3
  14. package/dist/{chunk-PWBILI5P.js → chunk-7KI224YS.js} +1 -1
  15. package/dist/{chunk-5TNS3PL7.js → chunk-CLURXEWV.js} +4 -3
  16. package/dist/{chunk-7ZR5UPMB.js → chunk-CMFCCIQN.js} +167 -1
  17. package/dist/{chunk-AX23QKHS.js → chunk-CRLAB4PM.js} +1 -1
  18. package/dist/{chunk-CM5QTKM4.js → chunk-EQG7L6LM.js} +311 -29
  19. package/dist/{chunk-OEK4JEB3.js → chunk-ERI5GBNI.js} +18 -3
  20. package/dist/{chunk-ILEA3YHM.js → chunk-EWBM2USM.js} +2 -2
  21. package/dist/{chunk-EV3M3EH7.js → chunk-G54QHBTI.js} +2 -2
  22. package/dist/{chunk-M3SQ4YGD.js → chunk-GXSMDL4M.js} +1 -1
  23. package/dist/{chunk-GAYWY4GI.js → chunk-HN2JBGSI.js} +2 -1
  24. package/dist/{chunk-ZOAEPWGL.js → chunk-HWMYGAKF.js} +1 -1
  25. package/dist/chunk-I2UOAV7X.js +133 -0
  26. package/dist/{chunk-ABIWDUMS.js → chunk-IS4DIGBQ.js} +13 -1
  27. package/dist/{chunk-WVGSB3Z2.js → chunk-J5DPVNL3.js} +2 -2
  28. package/dist/{chunk-VXLJORHL.js → chunk-JXH6LEEH.js} +1 -1
  29. package/dist/{chunk-JPR2WHHF.js → chunk-KI7VPNKC.js} +1 -1
  30. package/dist/{chunk-TUUMW4TC.js → chunk-LSPJHYHM.js} +1 -1
  31. package/dist/{chunk-7VNURP6M.js → chunk-M2F2RAMK.js} +82 -26
  32. package/dist/{chunk-NALVDFIS.js → chunk-MJLUWGUD.js} +2 -2
  33. package/dist/{chunk-5FWNEQNZ.js → chunk-NACLOOXP.js} +5 -5
  34. package/dist/{chunk-U3GOI2B4.js → chunk-NPBLDMSD.js} +1 -1
  35. package/dist/{chunk-BOLTI6LR.js → chunk-PLMTLGYH.js} +1 -1
  36. package/dist/{chunk-IRCBTGWF.js → chunk-QJPO42VI.js} +6 -6
  37. package/dist/{chunk-5QLNZGAQ.js → chunk-R5SPFO6F.js} +6 -6
  38. package/dist/{chunk-M5POMKKW.js → chunk-V7NIVOFD.js} +5 -5
  39. package/dist/{chunk-IJBVPLZZ.js → chunk-VUGDEUMM.js} +71 -143
  40. package/dist/{chunk-4ACZCY4I.js → chunk-WMPO3SKK.js} +3 -3
  41. package/dist/{chunk-TTNFGMHO.js → chunk-Y7UQHKFY.js} +19 -1
  42. package/dist/{chunk-BCLJSQCV.js → chunk-YO4PSLVB.js} +1 -1
  43. package/dist/{chunk-AIL2R4SI.js → chunk-YU4Z2O3W.js} +5 -5
  44. package/dist/{chunk-ZZXLM64C.js → chunk-ZJ3WRVRG.js} +1 -1
  45. package/dist/{cli-AOJPAVFX.js → cli-OWM54BIU.js} +120 -93
  46. package/dist/{command-SY3SVLAI.js → command-LIHTWJHQ.js} +31 -25
  47. package/dist/{config-Z3USDBLU.js → config-OOBPCY7Q.js} +2 -2
  48. package/dist/{connect-cmd-PNZ6IJLJ.js → connect-cmd-NV7WVBY7.js} +3 -3
  49. package/dist/{context-adopt-CE4KDXS3.js → context-adopt-PPCNSN5D.js} +7 -7
  50. package/dist/{context-materialize-QL33HDJN.js → context-materialize-YR3JQCUF.js} +7 -7
  51. package/dist/{dist-3ZTZF2TP.js → dist-2LNAXGPZ.js} +1 -1
  52. package/dist/{docker-676FD3CQ.js → docker-RSALMGPL.js} +4 -4
  53. package/dist/{doctor-WR6TRPSU.js → doctor-PKT42NOJ.js} +59 -25
  54. package/dist/{emit-artifact-cmd-AVM4YXMQ.js → emit-artifact-cmd-BZYXRBCV.js} +8 -8
  55. package/dist/{emit-cmd-2QRMYPYO.js → emit-cmd-IRYNFHPM.js} +3 -3
  56. package/dist/{emit-criteria-cmd-LDBE4YDS.js → emit-criteria-cmd-PSZYZ32B.js} +6 -6
  57. package/dist/{emit-finding-cmd-6R5WBPCH.js → emit-finding-cmd-VTSYDJYZ.js} +6 -6
  58. package/dist/{emit-result-cmd-2DMN6O6U.js → emit-result-cmd-5P7ZFWMZ.js} +8 -8
  59. package/dist/{exec-client-NPYNUAF3.js → exec-client-2UX6NHAO.js} +3 -3
  60. package/dist/{guest-init-JWNNAH2H.js → guest-init-VHQNFCFS.js} +3 -3
  61. package/dist/{hook-fast-XBOZ3N6L.js → hook-fast-OCHVQZTU.js} +1 -1
  62. package/dist/{host-key-KDYZ5ECC.js → host-key-YMLXY6QB.js} +1 -1
  63. package/dist/{import-capture-cmd-T4556ELW.js → import-capture-cmd-2QFLZQFY.js} +3 -3
  64. package/dist/{import-ruler-cmd-SG3UVGI7.js → import-ruler-cmd-BD22GUJS.js} +1 -1
  65. package/dist/index.js +3 -3
  66. package/dist/{init-R2FJ5KNS.js → init-CY4IMZE4.js} +22 -22
  67. package/dist/{init-KDK5QLQZ.js → init-TQUN5RF7.js} +20 -20
  68. package/dist/{init-cmd-BYZYAJ5P.js → init-cmd-F4TZXQJH.js} +11 -11
  69. package/dist/{install-FHTVJZS6.js → install-C33LT5KQ.js} +3 -3
  70. package/dist/{install-cmd-DCF7TVXD.js → install-cmd-5HYMXLEW.js} +2 -1
  71. package/dist/{loop-AG3PLXPO.js → loop-NZP5FAC3.js} +30 -29
  72. package/dist/{machine-LV6WBRRK.js → machine-RUSNVLKO.js} +19 -19
  73. package/dist/{mcp-install-cmd-RLK4SO3N.js → mcp-install-cmd-4AQMSIGY.js} +1 -1
  74. package/dist/{mcp-serve-cmd-N6UD2KBX.js → mcp-serve-cmd-3KVYEUXG.js} +3 -3
  75. package/dist/{real-deps-SU24ZA2K.js → real-deps-TK6JMQSW.js} +3 -2
  76. package/dist/{session-sender-Q5HAMOL2.js → session-sender-EECVKXTC.js} +7 -7
  77. package/dist/{starter-pack-MUXMAU4S.js → starter-pack-VNWPYP5U.js} +3 -3
  78. package/dist/{status-HH4OSOHR.js → status-KCONQLOD.js} +31 -25
  79. package/dist/{sync-cmd-CAEPJR7B.js → sync-cmd-R54ZBHXX.js} +6 -6
  80. package/dist/{watch-LAAZFBHH.js → watch-YTFNBO3S.js} +6 -6
  81. package/dist/{work-claim-cmd-ARIYZARE.js → work-claim-cmd-HRPJ4VUF.js} +10 -10
  82. package/dist/{work-cmd-B3FOXZAL.js → work-cmd-W4GQUUBC.js} +7 -7
  83. package/dist/{work-comment-cmd-O5WGRI6K.js → work-comment-cmd-DDZ4SZ35.js} +7 -7
  84. package/dist/{work-open-pr-cmd-M6CQW7KW.js → work-open-pr-cmd-GXULDTSC.js} +8 -8
  85. package/dist/{work-pr-cmd-C4YEGKD6.js → work-pr-cmd-T6SU4TYN.js} +7 -7
  86. package/package.json +2 -2
  87. package/skill-pack/maintained/amend/SKILL.md +22 -6
  88. package/skill-pack/maintained/outerlayer/SKILL.md +12 -2
  89. package/skill-pack/maintained/outerlayer/references/open-pull-request.md +29 -0
  90. package/skill-pack/template/build/SKILL.md +3 -2
  91. package/skill-pack/template/build/references/release.md +11 -2
@@ -1,27 +1,27 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
3
  import { RUNNER_PROTOCOL } from './chunk-AIW6GLET.js';
4
- import { resolveCredentials, WorkCommandError, parsePositiveInt, postJson, resolveRepository, findLiveItem } from './chunk-5QLNZGAQ.js';
5
- export { WorkCommandError } from './chunk-5QLNZGAQ.js';
6
- import './chunk-4ACZCY4I.js';
4
+ import { resolveCredentials, WorkCommandError, parsePositiveInt, postJson, resolveRepository, findLiveItem } from './chunk-R5SPFO6F.js';
5
+ export { WorkCommandError } from './chunk-R5SPFO6F.js';
6
+ import './chunk-WMPO3SKK.js';
7
7
  import './chunk-BFESLKPP.js';
8
- import './chunk-ILEA3YHM.js';
8
+ import './chunk-EWBM2USM.js';
9
9
  import './chunk-ZYHKJKSU.js';
10
- import './chunk-GAYWY4GI.js';
10
+ import './chunk-HN2JBGSI.js';
11
11
  import './chunk-USO2DKBD.js';
12
12
  import './chunk-N6LURUEF.js';
13
13
  import './chunk-YRYMNBGQ.js';
14
- import { defaultRunnerConfigPath } from './chunk-PWBILI5P.js';
14
+ import { defaultRunnerConfigPath } from './chunk-7KI224YS.js';
15
15
  import './chunk-UXYLWVTQ.js';
16
16
  import './chunk-7RQ73DLO.js';
17
- import './chunk-OD2VTIHN.js';
17
+ import './chunk-2FWL7CE2.js';
18
18
  import './chunk-HKMPVPO7.js';
19
19
  import './chunk-WZBHBH3J.js';
20
- import { defaultFetch } from './chunk-BCLJSQCV.js';
21
- import './chunk-BOLTI6LR.js';
20
+ import { defaultFetch } from './chunk-YO4PSLVB.js';
21
+ import './chunk-PLMTLGYH.js';
22
22
  import './chunk-YNJEOGDL.js';
23
23
  import './chunk-EABW6AJQ.js';
24
- import { ensureHostKey } from './chunk-M5POMKKW.js';
24
+ import { ensureHostKey } from './chunk-V7NIVOFD.js';
25
25
  import './chunk-ZM2IMMYN.js';
26
26
  import './chunk-BJ3KTMDH.js';
27
27
  import { homeFromEnv } from './chunk-VNVZDWO3.js';
@@ -1,20 +1,20 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- export { WorkCommandError, findLiveItem, getJson, parsePositiveInt, postJson, resolveCredentials, resolveRepository, runWorkBuild, runWorkLinkSession, runWorkList, runWorkRemove, runWorkStatus } from './chunk-5QLNZGAQ.js';
4
- import './chunk-4ACZCY4I.js';
3
+ export { WorkCommandError, findLiveItem, getJson, parsePositiveInt, postJson, resolveCredentials, resolveRepository, runWorkBuild, runWorkLinkSession, runWorkList, runWorkRemove, runWorkStatus } from './chunk-R5SPFO6F.js';
4
+ import './chunk-WMPO3SKK.js';
5
5
  import './chunk-BFESLKPP.js';
6
- import './chunk-ILEA3YHM.js';
6
+ import './chunk-EWBM2USM.js';
7
7
  import './chunk-ZYHKJKSU.js';
8
- import './chunk-GAYWY4GI.js';
8
+ import './chunk-HN2JBGSI.js';
9
9
  import './chunk-USO2DKBD.js';
10
10
  import './chunk-N6LURUEF.js';
11
11
  import './chunk-YRYMNBGQ.js';
12
12
  import './chunk-WZBHBH3J.js';
13
- import './chunk-BCLJSQCV.js';
14
- import './chunk-BOLTI6LR.js';
13
+ import './chunk-YO4PSLVB.js';
14
+ import './chunk-PLMTLGYH.js';
15
15
  import './chunk-YNJEOGDL.js';
16
16
  import './chunk-EABW6AJQ.js';
17
- import './chunk-M5POMKKW.js';
17
+ import './chunk-V7NIVOFD.js';
18
18
  import './chunk-ZM2IMMYN.js';
19
19
  import './chunk-BJ3KTMDH.js';
20
20
  import './chunk-VNVZDWO3.js';
@@ -1,20 +1,20 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { resolveCredentials, postJson, getJson } from './chunk-5QLNZGAQ.js';
4
- import './chunk-4ACZCY4I.js';
3
+ import { resolveCredentials, postJson, getJson } from './chunk-R5SPFO6F.js';
4
+ import './chunk-WMPO3SKK.js';
5
5
  import { detectActiveSession } from './chunk-BFESLKPP.js';
6
- import './chunk-ILEA3YHM.js';
6
+ import './chunk-EWBM2USM.js';
7
7
  import { sanitizeTerminal } from './chunk-ZYHKJKSU.js';
8
- import { resolveRepoIdentity } from './chunk-GAYWY4GI.js';
8
+ import { resolveRepoIdentity } from './chunk-HN2JBGSI.js';
9
9
  import './chunk-USO2DKBD.js';
10
10
  import './chunk-N6LURUEF.js';
11
11
  import './chunk-YRYMNBGQ.js';
12
12
  import { parseTrackerNumber, trackerNumberError } from './chunk-WZBHBH3J.js';
13
- import { defaultFetch } from './chunk-BCLJSQCV.js';
14
- import './chunk-BOLTI6LR.js';
13
+ import { defaultFetch } from './chunk-YO4PSLVB.js';
14
+ import './chunk-PLMTLGYH.js';
15
15
  import './chunk-YNJEOGDL.js';
16
16
  import './chunk-EABW6AJQ.js';
17
- import './chunk-M5POMKKW.js';
17
+ import './chunk-V7NIVOFD.js';
18
18
  import './chunk-ZM2IMMYN.js';
19
19
  import './chunk-BJ3KTMDH.js';
20
20
  import { homeFromEnv } from './chunk-VNVZDWO3.js';
@@ -1,21 +1,21 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { runWorkPr, WorkPrCommandError } from './chunk-K35RW5HP.js';
4
- import { resolveCredentials } from './chunk-5QLNZGAQ.js';
5
- import './chunk-4ACZCY4I.js';
3
+ import { runWorkPr, WorkPrCommandError } from './chunk-33GOCSRO.js';
4
+ import { resolveCredentials } from './chunk-R5SPFO6F.js';
5
+ import './chunk-WMPO3SKK.js';
6
6
  import './chunk-BFESLKPP.js';
7
- import './chunk-ILEA3YHM.js';
7
+ import './chunk-EWBM2USM.js';
8
8
  import './chunk-ZYHKJKSU.js';
9
- import './chunk-GAYWY4GI.js';
9
+ import './chunk-HN2JBGSI.js';
10
10
  import './chunk-USO2DKBD.js';
11
11
  import './chunk-N6LURUEF.js';
12
12
  import './chunk-YRYMNBGQ.js';
13
13
  import './chunk-WZBHBH3J.js';
14
- import { defaultFetch } from './chunk-BCLJSQCV.js';
15
- import './chunk-BOLTI6LR.js';
14
+ import { defaultFetch } from './chunk-YO4PSLVB.js';
15
+ import './chunk-PLMTLGYH.js';
16
16
  import './chunk-YNJEOGDL.js';
17
17
  import './chunk-EABW6AJQ.js';
18
- import './chunk-M5POMKKW.js';
18
+ import './chunk-V7NIVOFD.js';
19
19
  import './chunk-ZM2IMMYN.js';
20
20
  import './chunk-BJ3KTMDH.js';
21
21
  import { homeFromEnv } from './chunk-VNVZDWO3.js';
@@ -1,20 +1,20 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- export { WorkPrCommandError, runWorkPr } from './chunk-K35RW5HP.js';
4
- import './chunk-4ACZCY4I.js';
3
+ export { WorkPrCommandError, runWorkPr } from './chunk-33GOCSRO.js';
4
+ import './chunk-WMPO3SKK.js';
5
5
  import './chunk-BFESLKPP.js';
6
- import './chunk-ILEA3YHM.js';
6
+ import './chunk-EWBM2USM.js';
7
7
  import './chunk-ZYHKJKSU.js';
8
- import './chunk-GAYWY4GI.js';
8
+ import './chunk-HN2JBGSI.js';
9
9
  import './chunk-USO2DKBD.js';
10
10
  import './chunk-N6LURUEF.js';
11
11
  import './chunk-YRYMNBGQ.js';
12
12
  import './chunk-WZBHBH3J.js';
13
- import './chunk-BCLJSQCV.js';
14
- import './chunk-BOLTI6LR.js';
13
+ import './chunk-YO4PSLVB.js';
14
+ import './chunk-PLMTLGYH.js';
15
15
  import './chunk-YNJEOGDL.js';
16
16
  import './chunk-EABW6AJQ.js';
17
- import './chunk-M5POMKKW.js';
17
+ import './chunk-V7NIVOFD.js';
18
18
  import './chunk-ZM2IMMYN.js';
19
19
  import './chunk-BJ3KTMDH.js';
20
20
  import './chunk-VNVZDWO3.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@outerlayer/cli",
3
- "version": "0.8.0",
3
+ "version": "0.8.2",
4
4
  "description": "OuterLayer CLI — commands: init, connect, doctor, login, logout, sync, daemon (alias: watch), emit, work, runner, hooks, mcp, import, context. Capture and sync coding-agent sessions, and record proof of factory work.",
5
5
  "license": "Apache-2.0",
6
6
  "author": "Magu Studios, Inc.",
@@ -54,7 +54,7 @@
54
54
  "@types/node": "^22.20.1",
55
55
  "commander": "^15.0.0",
56
56
  "http-message-sig": "0.3.0",
57
- "structured-headers": "2.0.3",
57
+ "structured-headers": "2.1.0",
58
58
  "tsup": "^8.5.0",
59
59
  "tsx": "^4.22.4",
60
60
  "typescript": "^5.5.3",
@@ -26,6 +26,15 @@ request's branch first if the working tree is not already on it.
26
26
  needs a person becomes a hand-off (step 5), never a stop that leaves a thread
27
27
  silently waiting on an agent.
28
28
 
29
+ ## Builds and local sessions
30
+
31
+ A session a runner started for the item is a build. `OUTERLAYER_JOB_DIR` is
32
+ set in a build and nowhere else. The GitHub token a runner gives a build can
33
+ read the issue and the pull request but cannot comment on either. In the
34
+ runner's own build environments, git pushes go through the runner, not
35
+ straight to the git host. A local session uses the person's own git remote and
36
+ `gh` login.
37
+
29
38
  ## Steps
30
39
 
31
40
  1. **Read the threads.**
@@ -56,8 +65,11 @@ request's branch first if the working tree is not already on it.
56
65
  - Make the change on the pull request's branch. Keep it to what the comment
57
66
  asks. Do not refactor around it.
58
67
  - Run the tests that cover the criterion, then the repository's full
59
- pre-push checks through a normal `git push`. Never bypass a hook. If the
60
- git host drops the connection during a long gate, push again with
68
+ pre-push checks through a normal `git push`. Never bypass a hook.
69
+ - A runner accepts a build's push only to the pull request's branch. If it
70
+ refuses one, read the reason git prints, fix it and push again.
71
+ - In a local session over SSH, the git host can drop the connection during
72
+ a long gate. Push again with
61
73
  `GIT_SSH_COMMAND="ssh -o ServerAliveInterval=20 -o ServerAliveCountMax=60"`.
62
74
  - **When the thread asks for new proof** (a criterion thread whose proof the
63
75
  person failed), capture it after the fixed state exists, in the form the
@@ -83,10 +95,14 @@ request's branch first if the working tree is not already on it.
83
95
  6. **Check nothing is left waiting.** Read the threads again. No thread you
84
96
  started with may still be waiting on an agent. If one is, the reply did not
85
97
  land or was flagged `unchanged`. Find out why and fix it, or report it.
86
- 7. **Report.** Comment once on the pull request: one line per thread, naming the
87
- criterion (or the general thread) and saying fixed (with the replacement) or
88
- handed off (with the reason). Plain language. No session labels, no raw
89
- command output.
98
+ 7. **Report.** Write one line per thread, naming the criterion (or the general
99
+ thread) and saying fixed (with the replacement) or handed off (with the
100
+ reason). Plain language. No session labels, no raw command output. Post the
101
+ lines once on the general thread, in a build and in a local session alike:
102
+ `outerlayer work comment --item "$OUTERLAYER_WORK" --body "<the lines>"`.
103
+ A plain comment from an agent leaves the general thread waiting on a person.
104
+ A local session also posts the lines once as a pull request comment. A build
105
+ does not try: its token cannot comment. End the session with the same lines.
90
106
 
91
107
  ## Rules
92
108
 
@@ -4,8 +4,9 @@ description: >
4
4
  Explain what OuterLayer is and how work flows through it: work items, the
5
5
  OUTERLAYER_WORK variable, the factory, and building an issue or specifying one.
6
6
  Use when asked about OuterLayer, a work item, OUTERLAYER_WORK, "build issue
7
- 42", how an issue becomes a pull request, or how to attach evidence or answer
8
- a review.
7
+ 42", how an issue becomes a pull request, how a build opens its pull request
8
+ (a runner build or a local session), or how to attach evidence or answer a
9
+ review.
9
10
  ---
10
11
 
11
12
  OuterLayer is a software factory. An issue goes in. A reviewed and verified
@@ -37,6 +38,15 @@ from the output of `outerlayer work build`.
37
38
  skill says what to capture.
38
39
  5. `/amend` answers the review threads a person handed to an agent.
39
40
 
41
+ ## Opening the pull request
42
+
43
+ A runner build opens its pull request with `outerlayer work open-pr`, never
44
+ with `gh pr create`. A session is a runner build when `OUTERLAYER_WORK` is set
45
+ and `OUTERLAYER_API_KEY` holds an item key, which starts with `olitem_`. A
46
+ local session uses `gh pr create` and then `outerlayer work pr <number>`. The
47
+ full steps are in
48
+ [references/open-pull-request.md](references/open-pull-request.md).
49
+
40
50
  Launching recorded work needs Claude Code. It is the one agent whose sessions
41
51
  OuterLayer can start with `OUTERLAYER_WORK` set and record. Other agents can
42
52
  read the files this repository emits, but they cannot be launched as work.
@@ -0,0 +1,29 @@
1
+ # Opening the pull request
2
+
3
+ How a build opens its pull request depends on where it runs.
4
+
5
+ A session is a runner build when `OUTERLAYER_WORK` is set and
6
+ `OUTERLAYER_API_KEY` holds an item key, which starts with `olitem_`. Any other
7
+ session is a local session.
8
+
9
+ ## A runner build
10
+
11
+ A runner build opens its pull request with `outerlayer work open-pr`:
12
+
13
+ outerlayer work open-pr --title "<title>" --body-file <path>
14
+
15
+ The build holds an item key, so the gateway opens the pull request as the
16
+ factory's GitHub App on the branch the build's claim named. The build needs no
17
+ GitHub login of its own, and it does not run `gh pr create`. The command also
18
+ links the pull request to the work item, so no `outerlayer work pr` follows.
19
+ Run it again to edit the pull request that is already open.
20
+
21
+ A runner build whose command exits 0 while its item has no pull request is
22
+ released `incomplete`, not `ok`. Open the pull request before the build ends.
23
+
24
+ ## A local session
25
+
26
+ A local session opens the pull request under the person's own GitHub login
27
+ with `gh pr create`. It then declares the pull request to the work item with
28
+ `outerlayer work pr <number>`. Without that declaration the item shows no pull
29
+ request, no evaluation and no evidence.
@@ -179,8 +179,9 @@ Run them in order.
179
179
 
180
180
  5. **Sync and pull request.** Read [references/release.md](references/release.md)
181
181
  on entry and run it. A release agent rebases, gates and pushes. Open the
182
- pull request. Then run `outerlayer work pr <number>` so the item links the
183
- pull request. When the issue has criteria, a fresh agent judges them with
182
+ pull request as release.md says: a runner build with `outerlayer work open-pr`,
183
+ which links it, and a local session with `gh pr create` and then
184
+ `outerlayer work pr <number>`. When the issue has criteria, a fresh agent judges them with
184
185
  [references/criteria-judge.md](references/criteria-judge.md), and the
185
186
  judge's HTML report is emitted:
186
187
 
@@ -21,12 +21,17 @@ problem, the change, how to verify it, and, when the change alters what a user
21
21
  sees or does, a link to each documentation file added or changed. It carries
22
22
  no telemetry, round tables or reviewer roles. Those go in the final report.
23
23
 
24
+ How to open it, and how to link it to the work item, depends on whether this is
25
+ a runner build or a local session. Read
26
+ `.outerlayer/skills/outerlayer/references/open-pull-request.md` and follow the
27
+ steps for where this build runs.
28
+
24
29
  Run the reader pass on the title and body before opening, and after any later
25
30
  edit. Add an "Unverified, non-blocking" section to the review report when
26
31
  classes were left unrefuted.
27
32
 
28
- The moment the pull request exists, declare it to the work item from this
29
- session:
33
+ In a local session, the moment the pull request exists, declare it to the work
34
+ item from this session:
30
35
 
31
36
  outerlayer work pr <number>
32
37
 
@@ -37,6 +42,10 @@ evaluation and no evidence. Check that the command reports the link as created
37
42
  or already present before going on. A CLI that does not know the command needs
38
43
  refreshing, and the final report names that as a blocker.
39
44
 
45
+ A runner build declares nothing. `outerlayer work open-pr` opens the pull
46
+ request and links it to the item in one step. Check that it reports the pull
47
+ request before going on.
48
+
40
49
  ## Judge the criteria
41
50
 
42
51
  When the issue has criteria, spawn one fresh agent on