@outerlayer/cli 0.12.0 → 0.13.0

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 (83) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +9 -4
  3. package/dist/{agent-setup-52LRZ6AY.js → agent-setup-QE6PSCEZ.js} +8 -8
  4. package/dist/build-info.json +1 -1
  5. package/dist/{builder-OF67QKDS.js → builder-UUS4ORDH.js} +3 -3
  6. package/dist/{check-RJOJU2WA.js → check-63IDCEEV.js} +27 -27
  7. package/dist/{chunk-XR3BJN33.js → chunk-22RMZBGW.js} +20 -1
  8. package/dist/{chunk-AHZQBGD2.js → chunk-2M63GG56.js} +1 -1
  9. package/dist/{chunk-27Y7AX2O.js → chunk-3D4OYFCD.js} +4 -4
  10. package/dist/{chunk-GGMRZPEA.js → chunk-3KTA5UU2.js} +1 -1
  11. package/dist/{chunk-USO2DKBD.js → chunk-4KSQKQXE.js} +8 -2
  12. package/dist/{chunk-C7N4TDHW.js → chunk-4QVZCVWT.js} +5 -5
  13. package/dist/{chunk-NPXQXYVA.js → chunk-6S3H3J6H.js} +2 -2
  14. package/dist/{chunk-DVT73QJO.js → chunk-C6IV5BV7.js} +10 -10
  15. package/dist/{chunk-JOXYKGUV.js → chunk-CNFVHDHG.js} +1 -1
  16. package/dist/{chunk-ANW7VHMH.js → chunk-DPKX26LT.js} +92 -16
  17. package/dist/{chunk-ZQUCTFXC.js → chunk-DXQ5MHCO.js} +1 -1
  18. package/dist/{chunk-GATMPAMK.js → chunk-EFZLAYPE.js} +2 -2
  19. package/dist/{chunk-SZOVKFWB.js → chunk-GI4XXD4I.js} +3 -3
  20. package/dist/{chunk-G5XY6CVG.js → chunk-HDTVTA6I.js} +2 -2
  21. package/dist/{chunk-325272HM.js → chunk-J5M7BSJQ.js} +11 -4
  22. package/dist/{chunk-3ZPYPFNM.js → chunk-JXYVA45C.js} +1 -1
  23. package/dist/{chunk-G5IEVZGI.js → chunk-LCEXHCHD.js} +1 -1
  24. package/dist/{chunk-GEBQXUFY.js → chunk-MJXXRX4M.js} +24 -10
  25. package/dist/{chunk-SKHN72JO.js → chunk-MZN7AQOB.js} +8 -8
  26. package/dist/{chunk-QEESCZ26.js → chunk-NX57IBNK.js} +1 -1
  27. package/dist/{chunk-6FH2AHJY.js → chunk-P4MM66C6.js} +30 -17
  28. package/dist/{chunk-IBB4D4KE.js → chunk-P6FX4D43.js} +1 -1
  29. package/dist/{chunk-A56PYPDF.js → chunk-R7OQTKWT.js} +2 -1
  30. package/dist/{chunk-2KLBKHT4.js → chunk-RLYZLUQ7.js} +1 -1
  31. package/dist/chunk-RMWLBUCJ.js +50 -0
  32. package/dist/{chunk-YEQL54G5.js → chunk-SFFHGX3G.js} +1 -1
  33. package/dist/{chunk-G4RXNF2L.js → chunk-SVEP7PVH.js} +12 -12
  34. package/dist/{chunk-VK25O2ZM.js → chunk-T5VPP6H7.js} +1 -1
  35. package/dist/{chunk-FO7KKPYG.js → chunk-TCIW27FM.js} +1 -1
  36. package/dist/{chunk-PDRYXERC.js → chunk-TOPDNXHZ.js} +5 -5
  37. package/dist/{chunk-5TGQHOUX.js → chunk-XJKL4BNU.js} +3 -3
  38. package/dist/{cli-JSSRGA6V.js → cli-WSBIAVZU.js} +116 -80
  39. package/dist/{command-3WYZ2ML5.js → command-N7BAB4XJ.js} +18 -18
  40. package/dist/{config-MKBX2ZQD.js → config-N3C6DFQA.js} +1 -1
  41. package/dist/{connect-cmd-A5NGODCJ.js → connect-cmd-FGYRLLXL.js} +5 -5
  42. package/dist/{context-adopt-BAHGXJZV.js → context-adopt-B3PWGFHL.js} +5 -5
  43. package/dist/{context-materialize-45OVRRK2.js → context-materialize-7S6NLLRO.js} +5 -5
  44. package/dist/{dist-EQDW7MZW.js → dist-LKDWQWZ7.js} +2 -2
  45. package/dist/{docker-VGWEJWI7.js → docker-BZ55BMBJ.js} +4 -4
  46. package/dist/{doctor-4FFXTQJ2.js → doctor-3H25Q7WT.js} +20 -20
  47. package/dist/{emit-artifact-cmd-QS7XNKBT.js → emit-artifact-cmd-IQCRXOH7.js} +8 -8
  48. package/dist/{emit-cmd-LXEIDKLT.js → emit-cmd-KDSM5VAO.js} +4 -4
  49. package/dist/{emit-criteria-cmd-XN6AKA53.js → emit-criteria-cmd-EYUXME26.js} +6 -6
  50. package/dist/{emit-finding-cmd-SQJSEHYS.js → emit-finding-cmd-P4RKBPBB.js} +6 -6
  51. package/dist/{emit-result-cmd-56RHPHOA.js → emit-result-cmd-6XYENU6H.js} +8 -8
  52. package/dist/{hook-fast-HLESEJAL.js → hook-fast-PXWKQPN6.js} +1 -1
  53. package/dist/{import-capture-cmd-NHMAFDM6.js → import-capture-cmd-2BKM5I2N.js} +3 -3
  54. package/dist/{import-ruler-cmd-UYB32YUT.js → import-ruler-cmd-IXR7YK47.js} +2 -2
  55. package/dist/index.js +3 -3
  56. package/dist/{init-UZKD4RY7.js → init-2LWVS4AH.js} +19 -19
  57. package/dist/{init-6AY5T3P6.js → init-ZL7ORPTF.js} +38 -28
  58. package/dist/{init-cmd-XGSX2BCC.js → init-cmd-JXOBCOIB.js} +14 -12
  59. package/dist/{install-VXXI7UR6.js → install-HDBIPHTX.js} +2 -2
  60. package/dist/{login-browser-7XGSV7MA.js → login-browser-QZCS3WW6.js} +2 -1
  61. package/dist/{loop-4NMI2USY.js → loop-XOAE6ZIY.js} +27 -27
  62. package/dist/{machine-4JX2D4TS.js → machine-G6PY2J2J.js} +15 -15
  63. package/dist/{mcp-install-cmd-XZARXNYT.js → mcp-install-cmd-VXVIH7PH.js} +1 -1
  64. package/dist/{runner-env-WAXTJXZK.js → runner-env-XTC53CHN.js} +3 -3
  65. package/dist/runner-key-TDTLNAKJ.js +154 -0
  66. package/dist/{session-sender-T7PN4YRC.js → session-sender-XVGZFWRK.js} +6 -6
  67. package/dist/{starter-pack-Z22VRFPF.js → starter-pack-B7JPGEDO.js} +4 -4
  68. package/dist/{status-OXBIRWJ7.js → status-MRTPG34B.js} +20 -20
  69. package/dist/{sync-cmd-EVXNR47N.js → sync-cmd-UBUZMMDN.js} +5 -5
  70. package/dist/{watch-7NSFOAL5.js → watch-STNPEWD6.js} +5 -5
  71. package/dist/{work-claim-cmd-KR7UR2AB.js → work-claim-cmd-CWGYEIJE.js} +10 -10
  72. package/dist/{work-cmd-JPM37MLF.js → work-cmd-X7NMJDFL.js} +7 -7
  73. package/dist/{work-comment-cmd-3DC6BC34.js → work-comment-cmd-FI2TMAYQ.js} +7 -7
  74. package/dist/{work-open-pr-cmd-XZQRJBNZ.js → work-open-pr-cmd-OVHJ5I5H.js} +8 -8
  75. package/dist/{work-pr-cmd-WHGZOP22.js → work-pr-cmd-Y5TDMQ4O.js} +7 -7
  76. package/package.json +1 -1
  77. package/skill-pack/template/build/SKILL.md +60 -33
  78. package/skill-pack/template/build/references/agent-briefs.md +4 -2
  79. package/skill-pack/template/build/references/release.md +1 -1
  80. package/skill-pack/template/build/references/review-loop.md +6 -2
  81. package/skill-pack/template/build/scripts/record-criteria.mjs +109 -143
  82. package/skill-pack/validators/code-review.yaml +4 -2
  83. package/dist/chunk-T6OIJQRT.js +0 -31
@@ -1,55 +1,55 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { LEASE_SECONDS, ALREADY_RELEASED, RENEW_INTERVAL_SECONDS } from './chunk-DVT73QJO.js';
4
- import './chunk-T6OIJQRT.js';
5
- import './chunk-5TGQHOUX.js';
6
- import './chunk-27Y7AX2O.js';
3
+ import { LEASE_SECONDS, ALREADY_RELEASED, RENEW_INTERVAL_SECONDS } from './chunk-C6IV5BV7.js';
4
+ import './chunk-RMWLBUCJ.js';
5
+ import './chunk-XJKL4BNU.js';
6
+ import './chunk-3D4OYFCD.js';
7
7
  import './chunk-HHJDN6AU.js';
8
8
  import './chunk-HYZRY4KZ.js';
9
9
  import { formatBytes } from './chunk-YYYRBYWG.js';
10
10
  import './chunk-TBT347UY.js';
11
- import { formatDuration, formatClock, relativeToRunner } from './chunk-SKHN72JO.js';
11
+ import { formatDuration, formatClock, relativeToRunner } from './chunk-MZN7AQOB.js';
12
12
  import './chunk-3FMPZPJQ.js';
13
13
  import './chunk-N5FOE5PS.js';
14
14
  import './chunk-OGFGZQA3.js';
15
- import './chunk-GGMRZPEA.js';
15
+ import './chunk-3KTA5UU2.js';
16
16
  import './chunk-QOZKPLVJ.js';
17
- import './chunk-QEESCZ26.js';
17
+ import './chunk-NX57IBNK.js';
18
18
  import './chunk-CX22S5BA.js';
19
19
  import './chunk-QKFB4K7X.js';
20
20
  import './chunk-RSNSZ2LJ.js';
21
21
  import './chunk-F7CU5ABH.js';
22
22
  import './chunk-BKO6JEZI.js';
23
- import './chunk-6FH2AHJY.js';
24
- import './chunk-GATMPAMK.js';
23
+ import './chunk-P4MM66C6.js';
24
+ import './chunk-EFZLAYPE.js';
25
25
  import './chunk-IP7BIBXJ.js';
26
- import './chunk-C7N4TDHW.js';
27
- import './chunk-JOXYKGUV.js';
28
- import './chunk-3ZPYPFNM.js';
29
- import './chunk-USO2DKBD.js';
26
+ import './chunk-4QVZCVWT.js';
27
+ import './chunk-CNFVHDHG.js';
28
+ import './chunk-JXYVA45C.js';
29
+ import './chunk-4KSQKQXE.js';
30
30
  import './chunk-N6LURUEF.js';
31
31
  import './chunk-YRYMNBGQ.js';
32
- import './chunk-XR3BJN33.js';
32
+ import './chunk-22RMZBGW.js';
33
33
  import './chunk-UXYLWVTQ.js';
34
34
  import './chunk-7RQ73DLO.js';
35
35
  import './chunk-4Q7OMKAT.js';
36
36
  import './chunk-GQD22KKN.js';
37
37
  import './chunk-WZBHBH3J.js';
38
38
  import './chunk-5QRP3MVS.js';
39
- import './chunk-SZOVKFWB.js';
39
+ import './chunk-GI4XXD4I.js';
40
40
  import './chunk-ZJSNLVCE.js';
41
- import './chunk-FO7KKPYG.js';
42
- import './chunk-G5IEVZGI.js';
43
- import './chunk-AHZQBGD2.js';
41
+ import './chunk-TCIW27FM.js';
42
+ import './chunk-LCEXHCHD.js';
43
+ import './chunk-2M63GG56.js';
44
44
  import './chunk-YO4PSLVB.js';
45
45
  import './chunk-PLMTLGYH.js';
46
- import './chunk-325272HM.js';
46
+ import './chunk-J5M7BSJQ.js';
47
47
  import './chunk-EABW6AJQ.js';
48
48
  import './chunk-BYT5O5RV.js';
49
49
  import './chunk-RA3O54FC.js';
50
50
  import './chunk-V7NIVOFD.js';
51
51
  import { runnerDir, jobsDir } from './chunk-ZM2IMMYN.js';
52
- import './chunk-YEQL54G5.js';
52
+ import './chunk-SFFHGX3G.js';
53
53
  import './chunk-XCCLFVXM.js';
54
54
  import './chunk-BJ3KTMDH.js';
55
55
  import './chunk-VNVZDWO3.js';
@@ -1,13 +1,13 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- export { CHUNK_PART_TARGET_BYTES, RETRYABLE_STATUSES, SyncConfigError, SyncTransportError, detectCi, isLoopbackUrl, resolveTier, runSync } from './chunk-27Y7AX2O.js';
3
+ export { CHUNK_PART_TARGET_BYTES, RETRYABLE_STATUSES, SyncConfigError, SyncTransportError, detectCi, isLoopbackUrl, resolveTier, runSync } from './chunk-3D4OYFCD.js';
4
4
  import './chunk-HHJDN6AU.js';
5
5
  import './chunk-TBT347UY.js';
6
6
  import './chunk-F7CU5ABH.js';
7
7
  import './chunk-BKO6JEZI.js';
8
8
  import './chunk-IP7BIBXJ.js';
9
- import './chunk-JOXYKGUV.js';
10
- import './chunk-3ZPYPFNM.js';
9
+ import './chunk-CNFVHDHG.js';
10
+ import './chunk-JXYVA45C.js';
11
11
  import './chunk-YRYMNBGQ.js';
12
12
  import './chunk-GQD22KKN.js';
13
13
  import './chunk-WZBHBH3J.js';
@@ -15,11 +15,11 @@ import './chunk-5QRP3MVS.js';
15
15
  import './chunk-ZJSNLVCE.js';
16
16
  import './chunk-YO4PSLVB.js';
17
17
  import './chunk-PLMTLGYH.js';
18
- import './chunk-325272HM.js';
18
+ import './chunk-J5M7BSJQ.js';
19
19
  export { cloudConfigPath, readCloudConfig, writeCloudConfig } from './chunk-EABW6AJQ.js';
20
20
  import './chunk-V7NIVOFD.js';
21
21
  import './chunk-ZM2IMMYN.js';
22
- import './chunk-YEQL54G5.js';
22
+ import './chunk-SFFHGX3G.js';
23
23
  import './chunk-XCCLFVXM.js';
24
24
  import './chunk-BJ3KTMDH.js';
25
25
  import './chunk-VNVZDWO3.js';
@@ -1,13 +1,13 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { LiveUploader } from './chunk-27Y7AX2O.js';
3
+ import { LiveUploader } from './chunk-3D4OYFCD.js';
4
4
  import './chunk-HHJDN6AU.js';
5
5
  import './chunk-TBT347UY.js';
6
6
  import './chunk-F7CU5ABH.js';
7
7
  import './chunk-BKO6JEZI.js';
8
8
  import './chunk-IP7BIBXJ.js';
9
- import './chunk-JOXYKGUV.js';
10
- import { StatuslineAggregator, CaptureDaemon } from './chunk-3ZPYPFNM.js';
9
+ import './chunk-CNFVHDHG.js';
10
+ import { StatuslineAggregator, CaptureDaemon } from './chunk-JXYVA45C.js';
11
11
  import './chunk-YRYMNBGQ.js';
12
12
  import './chunk-GQD22KKN.js';
13
13
  import './chunk-WZBHBH3J.js';
@@ -15,11 +15,11 @@ import './chunk-5QRP3MVS.js';
15
15
  import './chunk-ZJSNLVCE.js';
16
16
  import './chunk-YO4PSLVB.js';
17
17
  import './chunk-PLMTLGYH.js';
18
- import './chunk-325272HM.js';
18
+ import './chunk-J5M7BSJQ.js';
19
19
  import './chunk-EABW6AJQ.js';
20
20
  import './chunk-V7NIVOFD.js';
21
21
  import './chunk-ZM2IMMYN.js';
22
- import './chunk-YEQL54G5.js';
22
+ import './chunk-SFFHGX3G.js';
23
23
  import './chunk-XCCLFVXM.js';
24
24
  import './chunk-BJ3KTMDH.js';
25
25
  import { homeFromEnv } from './chunk-VNVZDWO3.js';
@@ -1,24 +1,24 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
3
  import { RUNNER_PROTOCOL } from './chunk-FI5UYJMQ.js';
4
- import { resolveCredentials, WorkCommandError, parsePositiveInt, postJson, environmentFacts, resolveRepository, findLiveItem } from './chunk-6FH2AHJY.js';
5
- export { WorkCommandError } from './chunk-6FH2AHJY.js';
6
- import './chunk-GATMPAMK.js';
4
+ import { resolveCredentials, WorkCommandError, parsePositiveInt, postJson, environmentFacts, resolveRepository, findLiveItem } from './chunk-P4MM66C6.js';
5
+ export { WorkCommandError } from './chunk-P4MM66C6.js';
6
+ import './chunk-EFZLAYPE.js';
7
7
  import './chunk-IP7BIBXJ.js';
8
- import './chunk-C7N4TDHW.js';
9
- import './chunk-JOXYKGUV.js';
10
- import './chunk-3ZPYPFNM.js';
11
- import './chunk-USO2DKBD.js';
8
+ import './chunk-4QVZCVWT.js';
9
+ import './chunk-CNFVHDHG.js';
10
+ import './chunk-JXYVA45C.js';
11
+ import './chunk-4KSQKQXE.js';
12
12
  import './chunk-N6LURUEF.js';
13
13
  import './chunk-YRYMNBGQ.js';
14
- import { defaultRunnerConfigPath } from './chunk-XR3BJN33.js';
14
+ import { defaultRunnerConfigPath } from './chunk-22RMZBGW.js';
15
15
  import './chunk-UXYLWVTQ.js';
16
16
  import './chunk-7RQ73DLO.js';
17
17
  import './chunk-4Q7OMKAT.js';
18
18
  import './chunk-WZBHBH3J.js';
19
19
  import { defaultFetch } from './chunk-YO4PSLVB.js';
20
20
  import './chunk-PLMTLGYH.js';
21
- import './chunk-325272HM.js';
21
+ import './chunk-J5M7BSJQ.js';
22
22
  import './chunk-EABW6AJQ.js';
23
23
  import './chunk-BYT5O5RV.js';
24
24
  import { ensureHostKey } from './chunk-V7NIVOFD.js';
@@ -118,7 +118,7 @@ async function runWorkRelease(opts) {
118
118
  { sessionId, ended: true },
119
119
  fetchImpl
120
120
  );
121
- const { markWorkLeaseRenewed } = await import('./hook-fast-HLESEJAL.js');
121
+ const { markWorkLeaseRenewed } = await import('./hook-fast-PXWKQPN6.js');
122
122
  markWorkLeaseRenewed(sessionId, opts.home ?? homeFromEnv(env));
123
123
  const output2 = opts.json ? JSON.stringify(data2) : `released session ${sessionId}'s lease on #${itemId}, if it held one`;
124
124
  if (!opts.quiet) process.stdout.write(output2 + "\n");
@@ -1,18 +1,18 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- export { WorkCommandError, environmentFacts, findLiveItem, getJson, parsePositiveInt, postJson, resolveCredentials, resolveRepository, runWorkBuild, runWorkLinkSession, runWorkList, runWorkRemove, runWorkStatus } from './chunk-6FH2AHJY.js';
4
- import './chunk-GATMPAMK.js';
3
+ export { WorkCommandError, environmentFacts, findLiveItem, getJson, parsePositiveInt, postJson, resolveCredentials, resolveRepository, runWorkBuild, runWorkLinkSession, runWorkList, runWorkRemove, runWorkStatus } from './chunk-P4MM66C6.js';
4
+ import './chunk-EFZLAYPE.js';
5
5
  import './chunk-IP7BIBXJ.js';
6
- import './chunk-C7N4TDHW.js';
7
- import './chunk-JOXYKGUV.js';
8
- import './chunk-3ZPYPFNM.js';
9
- import './chunk-USO2DKBD.js';
6
+ import './chunk-4QVZCVWT.js';
7
+ import './chunk-CNFVHDHG.js';
8
+ import './chunk-JXYVA45C.js';
9
+ import './chunk-4KSQKQXE.js';
10
10
  import './chunk-N6LURUEF.js';
11
11
  import './chunk-YRYMNBGQ.js';
12
12
  import './chunk-WZBHBH3J.js';
13
13
  import './chunk-YO4PSLVB.js';
14
14
  import './chunk-PLMTLGYH.js';
15
- import './chunk-325272HM.js';
15
+ import './chunk-J5M7BSJQ.js';
16
16
  import './chunk-EABW6AJQ.js';
17
17
  import './chunk-V7NIVOFD.js';
18
18
  import './chunk-ZM2IMMYN.js';
@@ -1,18 +1,18 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { resolveCredentials, postJson, getJson } from './chunk-6FH2AHJY.js';
4
- import './chunk-GATMPAMK.js';
3
+ import { resolveCredentials, postJson, getJson } from './chunk-P4MM66C6.js';
4
+ import './chunk-EFZLAYPE.js';
5
5
  import { detectActiveSession } from './chunk-IP7BIBXJ.js';
6
- import './chunk-C7N4TDHW.js';
7
- import { sanitizeTerminal } from './chunk-JOXYKGUV.js';
8
- import { resolveRepoIdentity } from './chunk-3ZPYPFNM.js';
9
- import './chunk-USO2DKBD.js';
6
+ import './chunk-4QVZCVWT.js';
7
+ import { sanitizeTerminal } from './chunk-CNFVHDHG.js';
8
+ import { resolveRepoIdentity } from './chunk-JXYVA45C.js';
9
+ import './chunk-4KSQKQXE.js';
10
10
  import './chunk-N6LURUEF.js';
11
11
  import './chunk-YRYMNBGQ.js';
12
12
  import { parseTrackerNumber, trackerNumberError } from './chunk-WZBHBH3J.js';
13
13
  import { defaultFetch } from './chunk-YO4PSLVB.js';
14
14
  import './chunk-PLMTLGYH.js';
15
- import './chunk-325272HM.js';
15
+ import './chunk-J5M7BSJQ.js';
16
16
  import './chunk-EABW6AJQ.js';
17
17
  import './chunk-V7NIVOFD.js';
18
18
  import './chunk-ZM2IMMYN.js';
@@ -1,20 +1,20 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { itemLabel, runWorkPr, WorkPrCommandError } from './chunk-NPXQXYVA.js';
4
- import { resolveCredentials } from './chunk-6FH2AHJY.js';
5
- import './chunk-GATMPAMK.js';
3
+ import { itemLabel, runWorkPr, WorkPrCommandError } from './chunk-6S3H3J6H.js';
4
+ import { resolveCredentials } from './chunk-P4MM66C6.js';
5
+ import './chunk-EFZLAYPE.js';
6
6
  import './chunk-IP7BIBXJ.js';
7
- import './chunk-C7N4TDHW.js';
8
- import './chunk-JOXYKGUV.js';
9
- import './chunk-3ZPYPFNM.js';
10
- import './chunk-USO2DKBD.js';
7
+ import './chunk-4QVZCVWT.js';
8
+ import './chunk-CNFVHDHG.js';
9
+ import './chunk-JXYVA45C.js';
10
+ import './chunk-4KSQKQXE.js';
11
11
  import './chunk-N6LURUEF.js';
12
12
  import './chunk-YRYMNBGQ.js';
13
13
  import { parseWorkItemEnv } from './chunk-GQD22KKN.js';
14
14
  import './chunk-WZBHBH3J.js';
15
15
  import { defaultFetch } from './chunk-YO4PSLVB.js';
16
16
  import './chunk-PLMTLGYH.js';
17
- import './chunk-325272HM.js';
17
+ import './chunk-J5M7BSJQ.js';
18
18
  import './chunk-EABW6AJQ.js';
19
19
  import './chunk-V7NIVOFD.js';
20
20
  import './chunk-ZM2IMMYN.js';
@@ -1,19 +1,19 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- export { WorkPrCommandError, itemLabel, runWorkPr } from './chunk-NPXQXYVA.js';
4
- import './chunk-GATMPAMK.js';
3
+ export { WorkPrCommandError, itemLabel, runWorkPr } from './chunk-6S3H3J6H.js';
4
+ import './chunk-EFZLAYPE.js';
5
5
  import './chunk-IP7BIBXJ.js';
6
- import './chunk-C7N4TDHW.js';
7
- import './chunk-JOXYKGUV.js';
8
- import './chunk-3ZPYPFNM.js';
9
- import './chunk-USO2DKBD.js';
6
+ import './chunk-4QVZCVWT.js';
7
+ import './chunk-CNFVHDHG.js';
8
+ import './chunk-JXYVA45C.js';
9
+ import './chunk-4KSQKQXE.js';
10
10
  import './chunk-N6LURUEF.js';
11
11
  import './chunk-YRYMNBGQ.js';
12
12
  import './chunk-GQD22KKN.js';
13
13
  import './chunk-WZBHBH3J.js';
14
14
  import './chunk-YO4PSLVB.js';
15
15
  import './chunk-PLMTLGYH.js';
16
- import './chunk-325272HM.js';
16
+ import './chunk-J5M7BSJQ.js';
17
17
  import './chunk-EABW6AJQ.js';
18
18
  import './chunk-V7NIVOFD.js';
19
19
  import './chunk-ZM2IMMYN.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@outerlayer/cli",
3
- "version": "0.12.0",
3
+ "version": "0.13.0",
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.",
@@ -125,48 +125,75 @@ Run them in order.
125
125
  has not expired, stop and name it.
126
126
  Phase 2 finds the issue's criteria. If it finds some, they are the
127
127
  definition of done, and each declares a proof form or a test. If it finds
128
- none, build from the issue's description. An issue without criteria is
129
- built, never sent back. Then no judge runs.
128
+ none, the build drafts them from the issue's description, and the drafted
129
+ criteria are the definition of done in the same way. An issue is never
130
+ sent back for lacking criteria.
130
131
  Ask nothing from here until the final report. An agent that needs a ruling
131
132
  states its assumption in its report and continues. The final report lists
132
133
  every assumption.
133
134
  2. **Read the criteria.** Record the issue's criteria on the item, so the
134
135
  Criteria tab, the item's status and the judge hold the pull request to one
135
- list. Save the issue body to a file and run:
136
-
137
- node .outerlayer/skills/build/scripts/record-criteria.mjs --item "$OUTERLAYER_WORK" --issue-file <body file>
138
-
139
- The script reads two shapes, in this order:
140
-
141
- 1. An `## Acceptance criteria` section whose items each start with an id in
142
- backticks. The id and the text after it are kept as written. A
143
- `(proof: <kind>)` on the line sets `proof`. Otherwise `proof` is `null`.
144
- 2. A heading or line that reads `Acceptance`, `Acceptance criteria` or
145
- `Done when`, in any case, with or without a colon, followed by a bullet
146
- list. Each bullet is one criterion. Its text is the bullet's text. Its id
147
- is `AC-<item number>-NN`, numbered from `01` in list order. `proof` is
148
- `null`. Never infer a proof kind from the words.
149
-
150
- It writes the list to
136
+ list. Read the whole issue and find its acceptance criteria in whatever
137
+ form they are written: under a heading of any wording, as a checklist or
138
+ numbered items, as "done when" prose, with ids or without. There is no
139
+ fixed shape. Keep each criterion's text exactly as the author wrote it.
140
+ Never reword one. A criterion you think is wrong becomes a note in the
141
+ final report, never an edit.
142
+
143
+ Write them, in the order the issue lists them, to a file:
144
+
145
+ { "criteria": [ { "id": "<the id, if the issue gives one>", "text": "<verbatim>", "proof": null } ] }
146
+
147
+ Give `proof` an artifact kind (`video`, `screenshot`, `report`, `log`,
148
+ `test` or `file`) only when the issue states that proof explicitly, as in
149
+ `(proof: screenshot)`. Never infer a proof kind from the words. Then run:
150
+
151
+ node .outerlayer/skills/build/scripts/record-criteria.mjs --item "$OUTERLAYER_WORK" --criteria-file <file>
152
+
153
+ The script keeps the issue's ids only when every criterion carries one
154
+ that fits the id grammar. Otherwise, a partly numbered list included, it
155
+ numbers every criterion `AC-<item number>-NN` in order, and the state file
156
+ says why. The final report says the criteria were numbered and from what.
157
+ A file the script cannot use exits 2 with the reason. Fix the file and
158
+ run it again.
159
+
160
+ When the issue has no criteria anywhere, draft them from the issue's
161
+ description. Each is one observable behavior the description asks for, in
162
+ its words, adding no scope it does not state. Write them to the same kind
163
+ of file without ids, set `proof` only when the description asks for that
164
+ proof, and run the script with `--drafted` added. It numbers the draft
165
+ `AC-<item number>-NN` and records it with `drafted: true`, so the Criteria
166
+ tab says the build drafted the list.
167
+
168
+ The script writes the list to
151
169
  `"$(git rev-parse --absolute-git-dir)/build-reports/criteria.json"` and runs
152
170
  `outerlayer emit criteria` on it. The gateway decides whether a list may be
153
171
  recorded. A 409 means the item already has a recorded list. That list
154
172
  stands, and nothing is recorded. No command returns the item's list, so the
155
- build cannot read it: it holds the work to the issue's reading of the criteria and says
156
- so in the final report. Any other
157
- refusal is written to the state file with its message, and the build
158
- continues. The script writes the outcome under `criteria` in the state
159
- file: `source` (`issue-ids`, `issue-bullets`, `item` or `none`), `recorded`,
160
- `count` and `list`. On a 409, `list` is empty, and the issue's reading of the
161
- criteria goes under `issueReading`. If neither shape is found, nothing is recorded and the
162
- build continues at the small tier, as for any issue without criteria. Change
163
- nothing in the issue. A criterion you think is wrong becomes a note in the
164
- final report, never an edit. The intake summary names how many criteria were
165
- recorded and from which shape, or says that none were found.
166
- 3. **Implement.** Branch `feat/<slug>` from the default branch. Spawn the
167
- implementer with the Implementer brief from
173
+ build cannot read it: it holds the work to its own reading of the criteria
174
+ and says so in the final report. Any other refusal is written to the state
175
+ file with its message, and the build continues. The script writes the
176
+ outcome under `criteria` in the state file: `source` (`issue`, `drafted`,
177
+ `item`, or `none` when even a draft holds no criterion), `recorded`,
178
+ `count`, `list` and `numbered`. On a 409, `list` is empty, and the build's
179
+ reading of the criteria goes under `issueReading`.
180
+
181
+ Drafted criteria are tiered, proven and judged like any others. A drafted
182
+ list stands like any recorded list. A later build's record
183
+ answers 409 until a person replaces the list with
184
+ `outerlayer emit criteria`, even after criteria are added to the issue. The
185
+ final report says the criteria were drafted and how to replace them.
186
+
187
+ Change nothing in the issue. The intake summary names how many criteria
188
+ were recorded, whether they kept the issue's ids or were numbered, and
189
+ whether they were drafted.
190
+ 3. **Implement.** When `OUTERLAYER_BRANCH` is set, as it is in a host's
191
+ build, work on that branch, checking it out if it is not current, and
192
+ push only to it: the host refuses a push to any other branch. Otherwise
193
+ branch `feat/<slug>` from the default branch. Spawn the implementer with the Implementer brief from
168
194
  [references/agent-briefs.md](references/agent-briefs.md), the issue, the
169
- branch and the instructions-file pointer. The phase ends when the
195
+ drafted criteria with their ids when the build drafted them, the branch
196
+ and the instructions-file pointer. The phase ends when the
170
197
  repository's own pre-push checks and tests pass on the branch. Review
171
198
  never opens on a red branch. A branch that cannot go green escalates.
172
199
  4. **Review.** Read [references/review-loop.md](references/review-loop.md) on
@@ -185,7 +212,7 @@ Run them in order.
185
212
  on entry and run it. A release agent rebases, gates and pushes. Open the
186
213
  pull request as release.md says: a runner build with `outerlayer work open-pr`,
187
214
  which links it, and a local session with `gh pr create` and then
188
- `outerlayer work pr <number>`. When the issue has criteria, a fresh agent judges them with
215
+ `outerlayer work pr <number>`. When the build recorded criteria, from the issue or drafted, a fresh agent judges them with
189
216
  [references/criteria-judge.md](references/criteria-judge.md), and the
190
217
  judge's HTML report is emitted:
191
218
 
@@ -78,8 +78,10 @@ drives the real chain, from input through storage to read-back, with nothing
78
78
  mocked at the store boundary, plus one test per criterion written from the
79
79
  criterion's own words. Read every failure. Each test must fail because the
80
80
  behavior is absent, not because of a typo or a missing import. Then implement
81
- until green. When the issue has no criteria, write tests from its description
82
- in the same order.
81
+ until green. When the build drafted the criteria from the issue's
82
+ description, they are requirements in the same way, and tests cite their
83
+ ids. When no criteria were recorded, write tests from the description in the
84
+ same order.
83
85
 
84
86
  Version any new database migration with the current UTC time, never a round or
85
87
  guessed one. Two open branches that guess the same time both pass their own
@@ -76,7 +76,7 @@ Then run `outerlayer sync`. List every unsatisfied criterion in the final
76
76
  report. A criterion that declares a proof form such as a screenshot or video is
77
77
  proven only by an artifact bound to it on the pull request. The judge cannot
78
78
  see that, so confirm each has an artifact of the declared kind, and emit any
79
- that is missing in the evidence phase. When the issue has no criteria, no judge
79
+ that is missing in the evidence phase. When no criteria were recorded, no judge
80
80
  runs and no judge report is emitted.
81
81
 
82
82
  ## Watch CI
@@ -20,12 +20,16 @@ whatever its size.
20
20
 
21
21
  | Item and diff | Tier | Reviewers | Judge |
22
22
  |---|---|---|---|
23
- | No criteria | small | one generalist | no judge runs |
23
+ | No criteria recorded | small | one generalist | no judge runs |
24
24
  | Under ~40 lines, off the floor | small | one generalist | when criteria exist |
25
25
  | Up to ~800 lines, off the floor | medium | generalist + one focused reviewer | when criteria exist |
26
26
  | Floor, or larger | full | generalist + up to three | when criteria exist |
27
27
 
28
- An item with no criteria is `small` whatever its diff, and no judge runs.
28
+ An item with no criteria recorded is `small` whatever its diff, and no judge
29
+ runs. That happens only when the build could not draft a single criterion, since
30
+ an issue with no criteria gets a drafted list. A drafted list
31
+ (`criteria.source` is `drafted`) is tiered and judged like criteria the issue
32
+ wrote.
29
33
 
30
34
  - **Small.** One generalist reads the full diff. No focused reviewer and no
31
35
  mutation agent. The orchestrator runs the repository's mutation tool itself