jekyll-docs 3.4.3 → 3.5.1

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 (130) hide show
  1. checksums.yaml +4 -4
  2. data/lib/jekyll-docs.rb +1 -1
  3. data/site/404.html +5 -11
  4. data/site/community/index.html +9 -15
  5. data/site/css/screen.css +1 -1468
  6. data/site/docs/assets/index.html +20 -16
  7. data/site/docs/collections/index.html +115 -109
  8. data/site/docs/conduct/index.html +19 -15
  9. data/site/docs/configuration/index.html +39 -23
  10. data/site/docs/continuous-integration/buddyworks/index.html +728 -0
  11. data/site/docs/continuous-integration/circleci/index.html +19 -15
  12. data/site/docs/continuous-integration/index.html +20 -15
  13. data/site/docs/continuous-integration/travis-ci/index.html +21 -18
  14. data/site/docs/contributing/index.html +20 -16
  15. data/site/docs/datafiles/index.html +23 -15
  16. data/site/docs/deployment-methods/index.html +24 -20
  17. data/site/docs/drafts/index.html +19 -15
  18. data/site/docs/extras/index.html +31 -16
  19. data/site/docs/frontmatter/index.html +28 -15
  20. data/site/docs/github-pages/index.html +21 -17
  21. data/site/docs/history/index.html +521 -315
  22. data/site/docs/home/index.html +16 -15
  23. data/site/docs/includes/index.html +21 -17
  24. data/site/docs/installation/index.html +41 -31
  25. data/site/docs/maintaining/affinity-team-captain/index.html +19 -15
  26. data/site/docs/maintaining/avoiding-burnout/index.html +19 -15
  27. data/site/docs/maintaining/becoming-a-maintainer/index.html +19 -15
  28. data/site/docs/maintaining/index.html +19 -15
  29. data/site/docs/maintaining/merging-a-pull-request/index.html +19 -15
  30. data/site/docs/maintaining/reviewing-a-pull-request/index.html +19 -15
  31. data/site/docs/maintaining/special-labels/index.html +23 -15
  32. data/site/docs/maintaining/triaging-an-issue/index.html +20 -16
  33. data/site/docs/migrations/index.html +19 -15
  34. data/site/docs/pages/index.html +19 -15
  35. data/site/docs/pagination/index.html +19 -15
  36. data/site/docs/permalinks/index.html +19 -15
  37. data/site/docs/plugins/index.html +36 -23
  38. data/site/docs/posts/index.html +23 -19
  39. data/site/docs/quickstart/index.html +18 -17
  40. data/site/docs/resources/index.html +19 -15
  41. data/site/docs/sites/index.html +22 -15
  42. data/site/docs/static-files/index.html +52 -15
  43. data/site/docs/structure/index.html +19 -15
  44. data/site/docs/templates/index.html +29 -25
  45. data/site/docs/themes/index.html +65 -39
  46. data/site/docs/troubleshooting/index.html +41 -19
  47. data/site/docs/upgrading/0-to-2/index.html +19 -15
  48. data/site/docs/upgrading/2-to-3/index.html +20 -16
  49. data/site/docs/upgrading/index.html +22 -15
  50. data/site/docs/usage/index.html +20 -16
  51. data/site/docs/variables/index.html +19 -15
  52. data/site/docs/windows/index.html +135 -136
  53. data/site/feed.xml +228 -180
  54. data/site/help/index.html +11 -13
  55. data/site/img/jekylllayoutconcept.png +0 -0
  56. data/site/index.html +7 -14
  57. data/site/latest_version.txt +1 -1
  58. data/site/news/2013/05/05/jekyll-1-0-0-released/index.html +33 -19
  59. data/site/news/2013/05/08/jekyll-1-0-1-released/index.html +33 -19
  60. data/site/news/2013/05/12/jekyll-1-0-2-released/index.html +33 -19
  61. data/site/news/2013/06/07/jekyll-1-0-3-released/index.html +33 -19
  62. data/site/news/2013/07/14/jekyll-1-1-0-released/index.html +33 -19
  63. data/site/news/2013/07/24/jekyll-1-1-1-released/index.html +33 -19
  64. data/site/news/2013/07/25/jekyll-1-0-4-released/index.html +33 -19
  65. data/site/news/2013/07/25/jekyll-1-1-2-released/index.html +33 -19
  66. data/site/news/2013/09/06/jekyll-1-2-0-released/index.html +33 -19
  67. data/site/news/2013/09/14/jekyll-1-2-1-released/index.html +33 -19
  68. data/site/news/2013/10/28/jekyll-1-3-0-rc1-released/index.html +33 -19
  69. data/site/news/2013/11/04/jekyll-1-3-0-released/index.html +33 -19
  70. data/site/news/2013/11/26/jekyll-1-3-1-released/index.html +33 -19
  71. data/site/news/2013/12/07/jekyll-1-4-0-released/index.html +33 -19
  72. data/site/news/2013/12/09/jekyll-1-4-1-released/index.html +33 -19
  73. data/site/news/2013/12/16/jekyll-1-4-2-released/index.html +33 -19
  74. data/site/news/2014/01/13/jekyll-1-4-3-released/index.html +33 -19
  75. data/site/news/2014/03/24/jekyll-1-5-0-released/index.html +33 -19
  76. data/site/news/2014/03/27/jekyll-1-5-1-released/index.html +33 -19
  77. data/site/news/2014/05/06/jekyll-turns-2-0-0/index.html +33 -19
  78. data/site/news/2014/05/08/jekyll-2-0-3-released/index.html +33 -19
  79. data/site/news/2014/06/04/jekyll-stickers-1-dollar-stickermule/index.html +35 -21
  80. data/site/news/2014/06/28/jekyll-turns-21-i-mean-2-1-0/index.html +33 -19
  81. data/site/news/2014/07/01/jekyll-2-1-1-released/index.html +33 -19
  82. data/site/news/2014/07/29/jekyll-2-2-0-released/index.html +33 -19
  83. data/site/news/2014/08/10/jekyll-2-3-0-released/index.html +33 -19
  84. data/site/news/2014/09/09/jekyll-2-4-0-released/index.html +33 -19
  85. data/site/news/2014/11/05/jekylls-midlife-crisis-jekyll-turns-2-5-0/index.html +33 -19
  86. data/site/news/2014/11/09/jekyll-2-5-1-released/index.html +33 -19
  87. data/site/news/2014/11/12/jekyll-2-5-2-released/index.html +33 -19
  88. data/site/news/2014/12/17/alfredxing-welcome-to-jekyll-core/index.html +33 -19
  89. data/site/news/2014/12/22/jekyll-2-5-3-released/index.html +33 -19
  90. data/site/news/2015/01/20/jekyll-meet-and-greet/index.html +33 -19
  91. data/site/news/2015/01/24/jekyll-3-0-0-beta1-released/index.html +33 -19
  92. data/site/news/2015/02/26/introducing-jekyll-talk/index.html +33 -19
  93. data/site/news/2015/10/26/jekyll-3-0-released/index.html +33 -19
  94. data/site/news/2015/11/17/jekyll-3-0-1-released/index.html +33 -19
  95. data/site/news/2016/01/20/jekyll-3-0-2-released/index.html +33 -19
  96. data/site/news/2016/01/24/jekyll-3-1-0-released/index.html +33 -19
  97. data/site/news/2016/01/28/jekyll-3-1-1-released/index.html +33 -19
  98. data/site/news/2016/02/08/jekyll-3-0-3-released/index.html +33 -19
  99. data/site/news/2016/02/19/jekyll-3-1-2-released/index.html +33 -19
  100. data/site/news/2016/03/10/making-it-easier-to-contribute-to-jekyll/index.html +33 -19
  101. data/site/news/2016/04/19/jekyll-3-0-4-released/index.html +33 -19
  102. data/site/news/2016/04/19/jekyll-3-1-3-released/index.html +33 -19
  103. data/site/news/2016/04/26/jekyll-3-0-5-released/index.html +33 -19
  104. data/site/news/2016/05/18/jekyll-3-1-4-released/index.html +33 -19
  105. data/site/news/2016/05/18/jekyll-3-1-5-released/index.html +33 -19
  106. data/site/news/2016/05/19/jekyll-3-1-6-released/index.html +33 -19
  107. data/site/news/2016/06/03/update-on-jekyll-s-google-summer-of-code-projects/index.html +33 -19
  108. data/site/news/2016/07/26/jekyll-3-2-0-released/index.html +35 -21
  109. data/site/news/2016/08/02/jekyll-3-2-1-released/index.html +34 -20
  110. data/site/news/2016/08/24/jekyll-admin-initial-release/index.html +33 -19
  111. data/site/news/2016/10/06/jekyll-3-3-is-here/index.html +35 -21
  112. data/site/news/2016/11/14/jekyll-3-3-1-released/index.html +34 -20
  113. data/site/news/2017/01/18/jekyll-3-4-0-released/index.html +36 -22
  114. data/site/news/2017/03/02/jekyll-3-4-1-released/index.html +651 -0
  115. data/site/news/2017/03/09/jekyll-3-4-2-released/index.html +592 -0
  116. data/site/news/2017/03/21/jekyll-3-4-3-released/index.html +588 -0
  117. data/site/news/2017/06/15/jekyll-3-5-0-released/index.html +581 -0
  118. data/site/news/2017/07/17/jekyll-3-5-1-released/index.html +561 -0
  119. data/site/news/index.html +405 -22
  120. data/site/news/releases/index.html +405 -22
  121. data/site/philosophy.html +46 -0
  122. data/site/sitemap.xml +95 -48
  123. data/site/tutorials/convert-site-to-jekyll/index.html +851 -0
  124. data/site/tutorials/custom-404-page/index.html +366 -0
  125. data/site/tutorials/home/index.html +323 -0
  126. data/site/tutorials/index.html +10 -0
  127. data/site/tutorials/navigation/index.html +908 -0
  128. data/site/tutorials/orderofinterpretation/index.html +459 -0
  129. metadata +20 -7
  130. data/site/feed.xslt.xml +0 -4
@@ -0,0 +1,651 @@
1
+ <!DOCTYPE HTML>
2
+ <html lang="en-US">
3
+ <head>
4
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
5
+ <meta charset="UTF-8">
6
+ <meta name="viewport" content="width=device-width,initial-scale=1">
7
+ <meta name="generator" content="Jekyll v3.5.1">
8
+ <link type="application/atom+xml" rel="alternate" href="https://jekyllrb.com/feed.xml" title="Jekyll • Simple, blog-aware, static sites">
9
+ <link rel="alternate" type="application/atom+xml" title="Recent commits to Jekyll’s master branch" href="https://github.com/jekyll/jekyll/commits/master.atom">
10
+ <link rel="stylesheet" href="//fonts.googleapis.com/css?family=Lato:300,300italic,400,400italic,700,700italic,900">
11
+ <link rel="stylesheet" href="/css/screen.css">
12
+ <link rel="icon" type="image/x-icon" href="/favicon.ico">
13
+ <!-- Begin Jekyll SEO tag v2.2.3 -->
14
+ <title>Jekyll 3.4.1, or “Unintended Consequences” | Jekyll • Simple, blog-aware, static sites</title>
15
+ <meta property="og:title" content="Jekyll 3.4.1, or “Unintended Consequences”">
16
+ <meta name="author" content="parkr">
17
+ <meta property="og:locale" content="en_US">
18
+ <meta name="description" content="Conformity is a confounding thing.">
19
+ <meta property="og:description" content="Conformity is a confounding thing.">
20
+ <link rel="canonical" href="https://jekyllrb.com/news/2017/03/02/jekyll-3-4-1-released/">
21
+ <meta property="og:url" content="https://jekyllrb.com/news/2017/03/02/jekyll-3-4-1-released/">
22
+ <meta property="og:site_name" content="Jekyll • Simple, blog-aware, static sites">
23
+ <meta property="og:type" content="article">
24
+ <meta property="article:published_time" content="2017-03-02T11:20:26-08:00">
25
+ <meta name="twitter:card" content="summary">
26
+ <meta name="twitter:site" content="@jekyllrb">
27
+ <meta name="twitter:creator" content="@parkr">
28
+ <meta name="google-site-verification" content="onQcXpAvtHBrUI5LlroHNE_FP0b2qvFyPq7VZw36iEY">
29
+ <script type="application/ld+json">
30
+ {"@context":"http://schema.org","@type":"BlogPosting","headline":"Jekyll 3.4.1, or “Unintended Consequences”","author":{"@type":"Person","name":"parkr"},"datePublished":"2017-03-02T11:20:26-08:00","dateModified":"2017-03-02T11:20:26-08:00","description":"Conformity is a confounding thing.","publisher":{"@type":"Organization","logo":{"@type":"ImageObject","url":"https://jekyllrb.com/img/logo-2x.png"},"name":"parkr"},"mainEntityOfPage":{"@type":"WebPage","@id":"https://jekyllrb.com/news/2017/03/02/jekyll-3-4-1-released/"},"url":"https://jekyllrb.com/news/2017/03/02/jekyll-3-4-1-released/"}</script>
31
+ <!-- End Jekyll SEO tag -->
32
+
33
+ <!--[if lt IE 9]>
34
+ <script src="/js/html5shiv.min.js"></script>
35
+ <script src="/js/respond.min.js"></script>
36
+ <![endif]-->
37
+ </head>
38
+
39
+
40
+ <body class="wrap">
41
+ <header>
42
+ <nav class="mobile-nav show-on-mobiles">
43
+ <ul>
44
+ <li class="">
45
+ <a href="/">Home</a>
46
+ </li>
47
+ <li class="">
48
+ <a href="/docs/home/">Docs</a>
49
+ </li>
50
+ <li class="current">
51
+ <a href="/news/">News</a>
52
+ </li>
53
+ <li class="">
54
+ <a href="/community/">Community</a>
55
+ </li>
56
+ <li class="">
57
+ <a href="/help/">Help</a>
58
+ </li>
59
+ <li>
60
+ <a href="https://github.com/jekyll/jekyll">GitHub</a>
61
+ </li>
62
+ </ul>
63
+
64
+ </nav>
65
+ <div class="grid">
66
+ <div class="unit one-third center-on-mobiles">
67
+ <h1>
68
+ <a href="/">
69
+ <span class="sr-only">Jekyll</span>
70
+ <img src="/img/logo-2x.png" width="249" height="115" alt="Jekyll Logo">
71
+ </a>
72
+ </h1>
73
+ </div>
74
+ <nav class="main-nav unit two-thirds hide-on-mobiles">
75
+ <ul>
76
+ <li class="">
77
+ <a href="/">Home</a>
78
+ </li>
79
+ <li class="">
80
+ <a href="/docs/home/">Docs</a>
81
+ </li>
82
+ <li class="current">
83
+ <a href="/news/">News</a>
84
+ </li>
85
+ <li class="">
86
+ <a href="/community/">Community</a>
87
+ </li>
88
+ <li class="">
89
+ <a href="/help/">Help</a>
90
+ </li>
91
+ <li>
92
+ <a href="https://github.com/jekyll/jekyll">GitHub</a>
93
+ </li>
94
+ </ul>
95
+
96
+ </nav>
97
+ </div>
98
+ </header>
99
+
100
+
101
+ <section class="news">
102
+ <div class="grid">
103
+
104
+ <div class="docs-nav-mobile unit whole show-on-mobiles">
105
+ <select onchange="if (this.value) window.location.href=this.value">
106
+ <option value="">Navigate the blog…</option>
107
+ <option value="/news/">Home</option>
108
+ <optgroup label="v1.x">
109
+
110
+ <option value="/news/2017/07/17/jekyll-3-5-1-released/">Jekyll 3.5.1 Released</option>
111
+
112
+ <option value="/news/2017/06/15/jekyll-3-5-0-released/">Jekyll turns 3.5, oh my!</option>
113
+
114
+ <option value="/news/2017/03/21/jekyll-3-4-3-released/">Jekyll 3.4.3 Released</option>
115
+
116
+ <option value="/news/2017/03/09/jekyll-3-4-2-released/">Jekyll 3.4.2 Released</option>
117
+
118
+ <option value="/news/2017/03/02/jekyll-3-4-1-released/">Jekyll 3.4.1, or "Unintended Consequences"</option>
119
+
120
+ <option value="/news/2017/01/18/jekyll-3-4-0-released/">Jekyll turns 3.4.0</option>
121
+
122
+ <option value="/news/2016/11/14/jekyll-3-3-1-released/">Jekyll 3.3.1 Released</option>
123
+
124
+ <option value="/news/2016/10/06/jekyll-3-3-is-here/">Jekyll 3.3 is here with better theme support, new URL filters, and tons more</option>
125
+
126
+ <option value="/news/2016/08/24/jekyll-admin-initial-release/">Jekyll Admin Initial Release</option>
127
+
128
+ <option value="/news/2016/08/02/jekyll-3-2-1-released/">Jekyll 3.2.1 Released with Fix for Windows</option>
129
+
130
+ <option value="/news/2016/07/26/jekyll-3-2-0-released/">Jekyll turns 3.2</option>
131
+
132
+ <option value="/news/2016/06/03/update-on-jekyll-s-google-summer-of-code-projects/">Jekyll's Google Summer of Code Project: The CMS You Always Wanted</option>
133
+
134
+ <option value="/news/2016/05/19/jekyll-3-1-6-released/">Jekyll 3.1.6 Released</option>
135
+
136
+ <option value="/news/2016/05/18/jekyll-3-1-5-released/">Jekyll 3.1.5 Released</option>
137
+
138
+ <option value="/news/2016/05/18/jekyll-3-1-4-released/">Jekyll 3.1.4 "Stability Sam" Released</option>
139
+
140
+ <option value="/news/2016/04/26/jekyll-3-0-5-released/">Jekyll 3.0.5 Released</option>
141
+
142
+ <option value="/news/2016/04/19/jekyll-3-1-3-released/">Jekyll 3.1.3 Released</option>
143
+
144
+ <option value="/news/2016/04/19/jekyll-3-0-4-released/">Jekyll 3.0.4 Released</option>
145
+
146
+ <option value="/news/2016/03/10/making-it-easier-to-contribute-to-jekyll/">Making it easier to contribute to Jekyll</option>
147
+
148
+ <option value="/news/2016/02/19/jekyll-3-1-2-released/">Jekyll 3.1.2 Released!</option>
149
+
150
+ <option value="/news/2016/02/08/jekyll-3-0-3-released/">Jekyll 3.0.3 Released</option>
151
+
152
+ <option value="/news/2016/01/28/jekyll-3-1-1-released/">Jekyll 3.1.1 Released</option>
153
+
154
+ <option value="/news/2016/01/24/jekyll-3-1-0-released/">Jekyll 3.1.0 Released</option>
155
+
156
+ <option value="/news/2016/01/20/jekyll-3-0-2-released/">Jekyll 3.0.2 Released</option>
157
+
158
+ <option value="/news/2015/11/17/jekyll-3-0-1-released/">Jekyll 3.0.1 Released</option>
159
+
160
+ <option value="/news/2015/10/26/jekyll-3-0-released/">Jekyll 3.0 Released</option>
161
+
162
+ <option value="/news/2015/02/26/introducing-jekyll-talk/">Join the Discussion at Jekyll Talk</option>
163
+
164
+ <option value="/news/2015/01/24/jekyll-3-0-0-beta1-released/">Jekyll 3.0.0.beta1 Released</option>
165
+
166
+ <option value="/news/2015/01/20/jekyll-meet-and-greet/">Jekyll Meet &amp; Greet at GitHub HQ</option>
167
+
168
+ <option value="/news/2014/12/22/jekyll-2-5-3-released/">Jekyll Release for the Holidays! v2.5.3 Out</option>
169
+
170
+ <option value="/news/2014/12/17/alfredxing-welcome-to-jekyll-core/">Alfred Xing has joined the Jekyll core team</option>
171
+
172
+ <option value="/news/2014/11/12/jekyll-2-5-2-released/">Jekyll 2.5.2 Released</option>
173
+
174
+ <option value="/news/2014/11/09/jekyll-2-5-1-released/">Jekyll 2.5.1 Released</option>
175
+
176
+ <option value="/news/2014/11/05/jekylls-midlife-crisis-jekyll-turns-2-5-0/">Jekyll's Mid-Life Crisis (Or, Jekyll turns 2.5.0)</option>
177
+
178
+ <option value="/news/2014/09/09/jekyll-2-4-0-released/">A Wild Jekyll 2.4.0 Appeared!</option>
179
+
180
+ <option value="/news/2014/08/10/jekyll-2-3-0-released/">Jekyll 2.3.0 Released</option>
181
+
182
+ <option value="/news/2014/07/29/jekyll-2-2-0-released/">Jekyll 2.2.0 Released</option>
183
+
184
+ <option value="/news/2014/07/01/jekyll-2-1-1-released/">Jekyll 2.1.1 Released</option>
185
+
186
+ <option value="/news/2014/06/28/jekyll-turns-21-i-mean-2-1-0/">Jekyll Turns 21! Err... I mean 2.1.0.</option>
187
+
188
+ <option value="/news/2014/06/04/jekyll-stickers-1-dollar-stickermule/">Pick Up your $1 Jekyll Sticker</option>
189
+
190
+ <option value="/news/2014/05/08/jekyll-2-0-3-released/">Jekyll 2.0.3 Released</option>
191
+
192
+ <option value="/news/2014/05/06/jekyll-turns-2-0-0/">Jekyll turns 2.0.0</option>
193
+
194
+ <option value="/news/2014/03/27/jekyll-1-5-1-released/">Jekyll 1.5.1 Released</option>
195
+
196
+ <option value="/news/2014/03/24/jekyll-1-5-0-released/">Jekyll 1.5.0 Released</option>
197
+
198
+ <option value="/news/2014/01/13/jekyll-1-4-3-released/">Jekyll 1.4.3 Released</option>
199
+
200
+ <option value="/news/2013/12/16/jekyll-1-4-2-released/">Jekyll 1.4.2 Released</option>
201
+
202
+ <option value="/news/2013/12/09/jekyll-1-4-1-released/">Jekyll 1.4.1 Released</option>
203
+
204
+ <option value="/news/2013/12/07/jekyll-1-4-0-released/">Jekyll 1.4.0 Released</option>
205
+
206
+ <option value="/news/2013/11/26/jekyll-1-3-1-released/">Jekyll 1.3.1 Released</option>
207
+
208
+ <option value="/news/2013/11/04/jekyll-1-3-0-released/">Jekyll 1.3.0 Released</option>
209
+
210
+ <option value="/news/2013/10/28/jekyll-1-3-0-rc1-released/">Jekyll 1.3.0.rc1 Released</option>
211
+
212
+ <option value="/news/2013/09/14/jekyll-1-2-1-released/">Jekyll 1.2.1 Released</option>
213
+
214
+ <option value="/news/2013/09/06/jekyll-1-2-0-released/">Jekyll 1.2.0 Released</option>
215
+
216
+ <option value="/news/2013/07/25/jekyll-1-1-2-released/">Jekyll 1.1.2 Released</option>
217
+
218
+ <option value="/news/2013/07/25/jekyll-1-0-4-released/">Jekyll 1.0.4 Released</option>
219
+
220
+ <option value="/news/2013/07/24/jekyll-1-1-1-released/">Jekyll 1.1.1 Released</option>
221
+
222
+ <option value="/news/2013/07/14/jekyll-1-1-0-released/">Jekyll 1.1.0 Released</option>
223
+
224
+ <option value="/news/2013/06/07/jekyll-1-0-3-released/">Jekyll 1.0.3 Released</option>
225
+
226
+ <option value="/news/2013/05/12/jekyll-1-0-2-released/">Jekyll 1.0.2 Released</option>
227
+
228
+ <option value="/news/2013/05/08/jekyll-1-0-1-released/">Jekyll 1.0.1 Released</option>
229
+
230
+ <option value="/news/2013/05/05/jekyll-1-0-0-released/">Jekyll 1.0.0 Released</option>
231
+
232
+ </optgroup>
233
+ </select>
234
+ </div>
235
+
236
+
237
+ <div class="unit four-fifths">
238
+ <article>
239
+ <h2>
240
+ Jekyll 3.4.1, or "Unintended Consequences"
241
+ <a href="/news/2017/03/02/jekyll-3-4-1-released/" class="permalink" title="Permalink">∞</a>
242
+ </h2>
243
+ <span class="post-category">
244
+ <span class="label">
245
+ release
246
+ </span>
247
+ </span>
248
+ <div class="post-meta">
249
+ <span class="post-date">
250
+ 02 Mar 2017
251
+ </span>
252
+ <a href="https://github.com/parkr" class="post-author">
253
+ <img class="avatar avatar-small" src="https://avatars3.githubusercontent.com/parkr?v=3&amp;s=24" alt="parkr" srcset="https://avatars3.githubusercontent.com/parkr?v=3&amp;s=24 1x, https://avatars3.githubusercontent.com/parkr?v=3&amp;s=48 2x, https://avatars3.githubusercontent.com/parkr?v=3&amp;s=72 3x, https://avatars3.githubusercontent.com/parkr?v=3&amp;s=96 4x" width="24" height="24" data-proofer-ignore="true">
254
+ parkr
255
+ </a>
256
+ </div>
257
+ <div class="post-content">
258
+ <p>Conformity is a confounding thing.</p>
259
+
260
+ <p>We write tests to ensure that a piece of functionality that works today
261
+ will work tomorrow, as further modifications are made to the codebase. This
262
+ is a principle of modern software development: every change must have a
263
+ test to guard against regressions to the functionality implemented by that
264
+ change.</p>
265
+
266
+ <p>And yet, occasionally, our very best efforts to test functionality will be
267
+ thwarted. This is because of how our code produces unintended
268
+ functionality, which naturally goes untested.</p>
269
+
270
+ <p>In our documentation, we tell users to name their posts with the following
271
+ format:</p>
272
+
273
+ <div class="language-text highlighter-rouge">
274
+ <pre class="highlight"><code>YYYY-MM-DD-title.extension
275
+ </code></pre>
276
+ </div>
277
+
278
+ <p>That format specifies exactly four numbers for the year, e.g. 2017, two
279
+ letters for the month, e.g. 03, and two letters for the day, e.g. 02. To
280
+ match this, we had the following regular expression:</p>
281
+
282
+ <div class="language-ruby highlighter-rouge">
283
+ <pre class="highlight"><code><span class="sr">%r!^(?:.+/)*(</span><span class="se">\d</span><span class="sr">+-</span><span class="se">\d</span><span class="sr">+-</span><span class="se">\d</span><span class="sr">+)-(.*)(</span><span class="se">\.</span><span class="sr">[^.]+)$!</span>
284
+ </code></pre>
285
+ </div>
286
+
287
+ <p>You might already see the punchline. While our documentation specifies the
288
+ exact number of numbers that is required for each section of the date, our
289
+ regular expression does not enforce this precision. What happens if a user
290
+ doesn’t conform to our documentation?</p>
291
+
292
+ <p>We recently <a href="https://github.com/jekyll/jekyll/issues/5603">received a bug report</a>
293
+ that detailed how the following file was considered a post:</p>
294
+
295
+ <div class="language-text highlighter-rouge">
296
+ <pre class="highlight"><code>84093135-42842323-42000001-b890-136270f7e5f1.md
297
+ </code></pre>
298
+ </div>
299
+
300
+ <p>Of course! It matches the above regular expression, but doesn’t satisfy
301
+ other requirements about those numbers being a valid date (unless you’re
302
+ living in a world that has 43 million months, and 42 million (and one)
303
+ days). So, we <a href="https://github.com/jekyll/jekyll/pull/5609">modified the regular expression to match our
304
+ documentation</a>:</p>
305
+
306
+ <div class="language-ruby highlighter-rouge">
307
+ <pre class="highlight"><code><span class="sr">%r!^(?:.+/)*(</span><span class="se">\d</span><span class="sr">{4}-</span><span class="se">\d</span><span class="sr">{2}-</span><span class="se">\d</span><span class="sr">{2})-(.*)(</span><span class="se">\.</span><span class="sr">[^.]+)$!</span>
308
+ </code></pre>
309
+ </div>
310
+
311
+ <p>Our tests all passed and we were properly excluding this crazy date with 43
312
+ million months and days. This change shipped in Jekyll v3.4.0 and all was
313
+ well.</p>
314
+
315
+ <p>Well, not so much.</p>
316
+
317
+ <p>A very common way to specify the month of February is <code class="highlighter-rouge">2</code>. This is true for
318
+ all single-digit months and days of the month. Notice anything about our
319
+ first regular expression versus our second? The second regular expression
320
+ imposes a <strong>minimum</strong>, as well as maximum, number of digits. This change
321
+ made Jekyll ignore dates with single-digit days and months.</p>
322
+
323
+ <p>The first eight years of Jekyll’s existence had allowed single-digit days
324
+ and months due to an imprecise regular expression. For some people, their
325
+ entire blog was missing, and there were no errors that told them why.</p>
326
+
327
+ <p>After receiving a few bug reports, it became clear what had happened.
328
+ Unintended functionality of the last eight years had been broken. Thus,
329
+ v3.4.0 was broken for a non-negligible number of sites. With a test site
330
+ in-hand from <a href="https://github.com/andrewbanchich" class="user-mention">@andrewbanchich</a>, I tracked it down to this regular expression
331
+ and <a href="https://github.com/jekyll/jekyll/pull/5920">reintroduced</a> a proper
332
+ minimum number of digits for each segment:</p>
333
+
334
+ <div class="language-ruby highlighter-rouge">
335
+ <pre class="highlight"><code><span class="sr">%r!^(?:.+/)*(</span><span class="se">\d</span><span class="sr">{2,4}-</span><span class="se">\d</span><span class="sr">{1,2}-</span><span class="se">\d</span><span class="sr">{1,2})-(.*)(</span><span class="se">\.</span><span class="sr">[^.]+)$!</span>
336
+ </code></pre>
337
+ </div>
338
+
339
+ <p>And, I wrote a test.</p>
340
+
341
+ <p>This change was quickly backported to v3.4.0 and here we are: releasing
342
+ v3.4.1. It will fix the problem for all users who were using single-digit
343
+ months and days.</p>
344
+
345
+ <p>With this, I encourage all of you to look at your code for <em>unintended</em>
346
+ functionality and make a judgement call: if it’s allowed, <em>should it be</em>?
347
+ If it should be allowed, make it <em>intended</em> functionality and test it! I
348
+ know I’ll be looking at my code with much greater scrutiny going forward,
349
+ looking for unintended consequences.</p>
350
+
351
+ <p>Many thanks to our Jekyll affinity team captains who helped out, including
352
+ <a href="https://github.com/pathawks" class="user-mention">@pathawks</a>, <a href="https://github.com/pnn" class="user-mention">@pnn</a>, and <a href="https://github.com/DirtyF" class="user-mention">@DirtyF</a>. Thanks, too, to <a href="https://github.com/ashmaroli" class="user-mention">@ashmaroli</a> for reviewing my
353
+ change with an eye for consistency and precision. This was certainly a team
354
+ effort.</p>
355
+
356
+ <p>We hope Jekyll v3.4.1 brings your variable-digit dates back to their
357
+ previous glory. We certainly won’t let that unintended functionality be
358
+ unintended any longer.</p>
359
+
360
+ <p>As always, Happy Jekylling!</p>
361
+
362
+ </div>
363
+ </article>
364
+
365
+ </div>
366
+
367
+ <div class="unit one-fifth hide-on-mobiles">
368
+ <aside>
369
+ <ul>
370
+ <li class="">
371
+ <a href="/news/">All News</a>
372
+ </li>
373
+ <li class="">
374
+ <a href="/news/releases/">Jekyll Releases</a>
375
+ </li>
376
+ </ul>
377
+ <h4>Recent Releases</h4>
378
+ <ul>
379
+
380
+ <li class="">
381
+ <a href="/news/2017/07/17/jekyll-3-5-1-released/">Version 3.5.1</a>
382
+ </li>
383
+
384
+ <li class="">
385
+ <a href="/news/2017/06/15/jekyll-3-5-0-released/">Version 3.5.0</a>
386
+ </li>
387
+
388
+ <li class="">
389
+ <a href="/news/2017/03/21/jekyll-3-4-3-released/">Version 3.4.3</a>
390
+ </li>
391
+
392
+ <li class="">
393
+ <a href="/news/2017/03/09/jekyll-3-4-2-released/">Version 3.4.2</a>
394
+ </li>
395
+
396
+ <li class="current">
397
+ <a href="/news/2017/03/02/jekyll-3-4-1-released/">Version 3.4.1</a>
398
+ </li>
399
+
400
+ <li>
401
+ <a href="/docs/history/">History »</a>
402
+ </li>
403
+ </ul>
404
+ <h4>Other News</h4>
405
+ <ul>
406
+
407
+
408
+
409
+
410
+
411
+
412
+
413
+
414
+
415
+
416
+
417
+
418
+
419
+
420
+
421
+
422
+
423
+
424
+ <li class="">
425
+ <a href="/news/2016/08/24/jekyll-admin-initial-release/">Jekyll Admin Initial Release</a>
426
+ </li>
427
+
428
+
429
+
430
+
431
+
432
+
433
+
434
+ <li class="">
435
+ <a href="/news/2016/06/03/update-on-jekyll-s-google-summer-of-code-projects/">Jekyll's Google Summer of Code Project: The CMS You Always Wanted</a>
436
+ </li>
437
+
438
+
439
+
440
+
441
+
442
+
443
+
444
+
445
+
446
+
447
+
448
+
449
+
450
+
451
+
452
+ <li class="">
453
+ <a href="/news/2016/03/10/making-it-easier-to-contribute-to-jekyll/">Making it easier to contribute to Jekyll</a>
454
+ </li>
455
+
456
+
457
+
458
+
459
+
460
+
461
+
462
+
463
+
464
+
465
+
466
+
467
+
468
+
469
+
470
+
471
+
472
+ <li class="">
473
+ <a href="/news/2015/02/26/introducing-jekyll-talk/">Join the Discussion at Jekyll Talk</a>
474
+ </li>
475
+
476
+
477
+
478
+
479
+
480
+ <li class="">
481
+ <a href="/news/2015/01/20/jekyll-meet-and-greet/">Jekyll Meet &amp; Greet at GitHub HQ</a>
482
+ </li>
483
+
484
+
485
+
486
+
487
+
488
+ <li class="">
489
+ <a href="/news/2014/12/17/alfredxing-welcome-to-jekyll-core/">Alfred Xing has joined the Jekyll core team</a>
490
+ </li>
491
+
492
+
493
+
494
+
495
+
496
+
497
+
498
+
499
+
500
+
501
+
502
+
503
+
504
+
505
+
506
+
507
+
508
+
509
+
510
+ <li class="">
511
+ <a href="/news/2014/06/04/jekyll-stickers-1-dollar-stickermule/">Pick Up your $1 Jekyll Sticker</a>
512
+ </li>
513
+
514
+
515
+
516
+
517
+
518
+
519
+
520
+
521
+
522
+
523
+
524
+
525
+
526
+
527
+
528
+
529
+
530
+
531
+
532
+
533
+
534
+
535
+
536
+
537
+
538
+
539
+
540
+
541
+
542
+
543
+
544
+
545
+
546
+
547
+
548
+
549
+
550
+
551
+
552
+
553
+
554
+
555
+
556
+
557
+ </ul>
558
+ </aside>
559
+ </div>
560
+
561
+
562
+ <div class="clear"></div>
563
+
564
+ </div>
565
+ </section>
566
+
567
+
568
+ <footer>
569
+ <div class="grid">
570
+ <div class="unit one-third center-on-mobiles">
571
+ <p>The contents of this website are <br>© 2017 under the terms of the <a href="https://github.com/jekyll/jekyll/blob/master/LICENSE">MIT License</a>.</p>
572
+ </div>
573
+ <div class="unit two-thirds align-right center-on-mobiles">
574
+ <p>
575
+ Proudly hosted by
576
+ <a href="https://github.com">
577
+ <img src="/img/footer-logo.png" width="100" height="30" alt="GitHub • Social coding">
578
+ </a>
579
+ </p>
580
+ </div>
581
+ </div>
582
+ </footer>
583
+
584
+ <script>
585
+ var anchorForId = function (id) {
586
+ var anchor = document.createElement("a");
587
+ anchor.className = "header-link";
588
+ anchor.href = "#" + id;
589
+ anchor.innerHTML = "<span class=\"sr-only\">Permalink</span><i class=\"fa fa-link\"></i>";
590
+ anchor.title = "Permalink";
591
+ return anchor;
592
+ };
593
+
594
+ var linkifyAnchors = function (level, containingElement) {
595
+ var headers = containingElement.getElementsByTagName("h" + level);
596
+ for (var h = 0; h < headers.length; h++) {
597
+ var header = headers[h];
598
+
599
+ if (typeof header.id !== "undefined" && header.id !== "") {
600
+ header.appendChild(anchorForId(header.id));
601
+ }
602
+ }
603
+ };
604
+
605
+ document.onreadystatechange = function () {
606
+ if (this.readyState === "complete") {
607
+ var contentBlock = document.getElementsByClassName("docs")[0] || document.getElementsByClassName("news")[0];
608
+ if (!contentBlock) {
609
+ return;
610
+ }
611
+ for (var level = 1; level <= 6; level++) {
612
+ linkifyAnchors(level, contentBlock);
613
+ }
614
+ }
615
+ };
616
+ </script>
617
+
618
+
619
+ <!-- Gauges (http://get.gaug.es/) -->
620
+ <script>
621
+ var _gauges = _gauges || [];
622
+ (function() {
623
+ var t = document.createElement('script');
624
+ t.type = 'text/javascript';
625
+ t.async = true;
626
+ t.id = 'gauges-tracker';
627
+ t.setAttribute('data-site-id', '503c5af6613f5d0f19000027');
628
+ t.src = '//secure.gaug.es/track.js';
629
+ var s = document.getElementsByTagName('script')[0];
630
+ s.parentNode.insertBefore(t, s);
631
+ })();
632
+ </script>
633
+
634
+
635
+
636
+ <!-- Google Analytics (https://www.google.com/analytics) -->
637
+ <script>
638
+ !function(j,e,k,y,l,L){j.GoogleAnalyticsObject=y,j[y]||(j[y]=function(){
639
+ (j[y].q=j[y].q||[]).push(arguments)}),j[y].l=+new Date,l=e.createElement(k),
640
+ L=e.getElementsByTagName(k)[0],l.src='//www.google-analytics.com/analytics.js',
641
+ L.parentNode.insertBefore(l,L)}(window,document,'script','ga');
642
+
643
+ ga('create', 'UA-50755011-1', 'jekyllrb.com');
644
+ ga('send', 'pageview');
645
+
646
+ </script>
647
+
648
+
649
+
650
+ </body>
651
+ </html>