diff --git a/resources/celerity/map.php b/resources/celerity/map.php
--- a/resources/celerity/map.php
+++ b/resources/celerity/map.php
@@ -10,7 +10,7 @@
     'conpherence.pkg.css' => '0e3cf785',
     'conpherence.pkg.js' => '020aebcf',
     'core.pkg.css' => 'f538846d',
-    'core.pkg.js' => '6a2c22c2',
+    'core.pkg.js' => '66c49ca1',
     'dark-console.pkg.js' => '187792c2',
     'differential.pkg.css' => '609e63d4',
     'differential.pkg.js' => 'c60bec1b',
@@ -257,7 +257,7 @@
     'rsrc/externals/javelin/lib/URI.js' => '2e255291',
     'rsrc/externals/javelin/lib/Vector.js' => 'e9c80beb',
     'rsrc/externals/javelin/lib/WebSocket.js' => 'fdc13e4e',
-    'rsrc/externals/javelin/lib/Workflow.js' => 'd7ba6915',
+    'rsrc/externals/javelin/lib/Workflow.js' => 'cc1553f3',
     'rsrc/externals/javelin/lib/__tests__/Cookie.js' => 'ca686f71',
     'rsrc/externals/javelin/lib/__tests__/DOM.js' => '4566e249',
     'rsrc/externals/javelin/lib/__tests__/JSON.js' => '710377ae',
@@ -265,7 +265,7 @@
     'rsrc/externals/javelin/lib/__tests__/behavior.js' => '8426ebeb',
     'rsrc/externals/javelin/lib/behavior.js' => '1b6acc2a',
     'rsrc/externals/javelin/lib/control/tokenizer/Tokenizer.js' => '89a1ae3a',
-    'rsrc/externals/javelin/lib/control/typeahead/Typeahead.js' => 'd96e47a4',
+    'rsrc/externals/javelin/lib/control/typeahead/Typeahead.js' => '0507519c',
     'rsrc/externals/javelin/lib/control/typeahead/normalizer/TypeaheadNormalizer.js' => 'a241536a',
     'rsrc/externals/javelin/lib/control/typeahead/source/TypeaheadCompositeSource.js' => '22ee68a5',
     'rsrc/externals/javelin/lib/control/typeahead/source/TypeaheadOnDemandSource.js' => '23387297',
@@ -423,7 +423,7 @@
     'rsrc/js/application/projects/WorkboardCard.js' => '0392a5d8',
     'rsrc/js/application/projects/WorkboardCardTemplate.js' => '84f82dad',
     'rsrc/js/application/projects/WorkboardColumn.js' => 'c3d24e63',
-    'rsrc/js/application/projects/WorkboardController.js' => 'b9d0c2f3',
+    'rsrc/js/application/projects/WorkboardController.js' => '7474d31f',
     'rsrc/js/application/projects/WorkboardDropEffect.js' => '8e0aa661',
     'rsrc/js/application/projects/WorkboardHeader.js' => '111bfd2d',
     'rsrc/js/application/projects/WorkboardHeaderTemplate.js' => 'ebe83a6b',
@@ -453,7 +453,7 @@
     'rsrc/js/core/DragAndDropFileUpload.js' => '4370900d',
     'rsrc/js/core/DraggableList.js' => '0169e425',
     'rsrc/js/core/Favicon.js' => '7930776a',
-    'rsrc/js/core/FileUpload.js' => 'ab85e184',
+    'rsrc/js/core/FileUpload.js' => '331676ea',
     'rsrc/js/core/Hovercard.js' => '6199f752',
     'rsrc/js/core/HovercardList.js' => 'de4b4919',
     'rsrc/js/core/KeyboardShortcut.js' => '1a844c06',
@@ -731,7 +731,7 @@
     'javelin-sound' => 'd4cc2d2a',
     'javelin-stratcom' => '0889b835',
     'javelin-tokenizer' => '89a1ae3a',
-    'javelin-typeahead' => 'd96e47a4',
+    'javelin-typeahead' => '0507519c',
     'javelin-typeahead-composite-source' => '22ee68a5',
     'javelin-typeahead-normalizer' => 'a241536a',
     'javelin-typeahead-ondemand-source' => '23387297',
@@ -751,12 +751,12 @@
     'javelin-workboard-card' => '0392a5d8',
     'javelin-workboard-card-template' => '84f82dad',
     'javelin-workboard-column' => 'c3d24e63',
-    'javelin-workboard-controller' => 'b9d0c2f3',
+    'javelin-workboard-controller' => '7474d31f',
     'javelin-workboard-drop-effect' => '8e0aa661',
     'javelin-workboard-header' => '111bfd2d',
     'javelin-workboard-header-template' => 'ebe83a6b',
     'javelin-workboard-order-template' => '03e8891f',
-    'javelin-workflow' => 'd7ba6915',
+    'javelin-workflow' => 'cc1553f3',
     'maniphest-report-css' => '3d53188b',
     'maniphest-task-edit-css' => '272daa84',
     'maniphest-task-summary-css' => '61d1667e',
@@ -787,7 +787,7 @@
     'phabricator-fatal-config-template-css' => 'e689dbbd',
     'phabricator-favicon' => '7930776a',
     'phabricator-feed-css' => 'd8b6e3f8',
-    'phabricator-file-upload' => 'ab85e184',
+    'phabricator-file-upload' => '331676ea',
     'phabricator-flag-css' => '2b77be8d',
     'phabricator-keyboard-shortcut' => '1a844c06',
     'phabricator-keyboard-shortcut-manager' => '81debc48',
@@ -965,6 +965,12 @@
       'javelin-dom',
       'javelin-workflow',
     ),
+    '0507519c' => array(
+      'javelin-install',
+      'javelin-dom',
+      'javelin-vector',
+      'javelin-util',
+    ),
     '05d290ef' => array(
       'javelin-install',
       'javelin-util',
@@ -1207,6 +1213,11 @@
       'javelin-stratcom',
       'javelin-dom',
     ),
+    '331676ea' => array(
+      'javelin-install',
+      'javelin-dom',
+      'phabricator-notification',
+    ),
     34450586 => array(
       'javelin-color',
       'javelin-install',
@@ -1589,6 +1600,16 @@
       'javelin-behavior',
       'javelin-dom',
     ),
+    '7474d31f' => array(
+      'javelin-install',
+      'javelin-dom',
+      'javelin-util',
+      'javelin-vector',
+      'javelin-stratcom',
+      'javelin-workflow',
+      'phabricator-drag-and-drop-file-upload',
+      'javelin-workboard-board',
+    ),
     '78bc5d94' => array(
       'javelin-behavior',
       'javelin-uri',
@@ -1856,11 +1877,6 @@
       'javelin-json',
       'phuix-form-control-view',
     ),
-    'ab85e184' => array(
-      'javelin-install',
-      'javelin-dom',
-      'phabricator-notification',
-    ),
     'ac10c917' => array(
       'javelin-behavior',
       'javelin-dom',
@@ -1983,16 +1999,6 @@
       'javelin-uri',
       'phabricator-notification',
     ),
-    'b9d0c2f3' => array(
-      'javelin-install',
-      'javelin-dom',
-      'javelin-util',
-      'javelin-vector',
-      'javelin-stratcom',
-      'javelin-workflow',
-      'phabricator-drag-and-drop-file-upload',
-      'javelin-workboard-board',
-    ),
     'bf159129' => array(
       'phui-inline-comment-view-css',
     ),
@@ -2034,6 +2040,17 @@
       'javelin-workflow',
       'javelin-json',
     ),
+    'cc1553f3' => array(
+      'javelin-stratcom',
+      'javelin-request',
+      'javelin-dom',
+      'javelin-vector',
+      'javelin-install',
+      'javelin-util',
+      'javelin-mask',
+      'javelin-uri',
+      'javelin-routable',
+    ),
     'cc2c5de5' => array(
       'javelin-install',
       'phuix-button-view',
@@ -2063,17 +2080,6 @@
     'd4cc2d2a' => array(
       'javelin-install',
     ),
-    'd7ba6915' => array(
-      'javelin-stratcom',
-      'javelin-request',
-      'javelin-dom',
-      'javelin-vector',
-      'javelin-install',
-      'javelin-util',
-      'javelin-mask',
-      'javelin-uri',
-      'javelin-routable',
-    ),
     'd7d3ba75' => array(
       'javelin-dom',
       'javelin-util',
@@ -2094,12 +2100,6 @@
       'javelin-util',
       'phabricator-shaped-request',
     ),
-    'd96e47a4' => array(
-      'javelin-install',
-      'javelin-dom',
-      'javelin-vector',
-      'javelin-util',
-    ),
     'da15d3dc' => array(
       'phui-oi-list-view-css',
     ),
diff --git a/src/applications/project/trigger/PhabricatorProjectTriggerAddProjectsRule.php b/src/applications/project/trigger/PhabricatorProjectTriggerAddProjectsRule.php
--- a/src/applications/project/trigger/PhabricatorProjectTriggerAddProjectsRule.php
+++ b/src/applications/project/trigger/PhabricatorProjectTriggerAddProjectsRule.php
@@ -6,7 +6,7 @@
   const TRIGGERTYPE = 'task.projects.add';
 
   public function getSelectControlName() {
-    return pht('Add project tags');
+    return pht('Add Project Tags');
   }
 
   protected function getValueForEditorField() {
@@ -17,7 +17,7 @@
     if (!is_array($value)) {
       throw new Exception(
         pht(
-          'Add project rule value should be a list, but is not '.
+          'Add Project Rule value should be a list, but is not '.
           '(value is "%s").',
           phutil_describe_type($value)));
     }
@@ -27,7 +27,7 @@
     if (!$value) {
       throw new Exception(
         pht(
-          'You must select at least one project tag to add.'));
+          'You must select at least one Project Tag to add.'));
     }
   }
 
@@ -91,7 +91,7 @@
 
   public function getRuleViewDescription($value) {
     return pht(
-      'Add project tags: %s.',
+      'Add Project Tags: %s.',
       phutil_tag(
         'strong',
         array(),
diff --git a/src/applications/project/trigger/PhabricatorProjectTriggerInvalidRule.php b/src/applications/project/trigger/PhabricatorProjectTriggerInvalidRule.php
--- a/src/applications/project/trigger/PhabricatorProjectTriggerInvalidRule.php
+++ b/src/applications/project/trigger/PhabricatorProjectTriggerInvalidRule.php
@@ -46,7 +46,7 @@
         ->setIcon('fa-exclamation-triangle red'),
       ' ',
       pht(
-        'This is a trigger rule with a valid type ("%s") but an invalid '.
+        'This is a Trigger Rule with a valid type ("%s") but an invalid '.
         'value.',
         $this->getRecord()->getType()),
     );
@@ -75,12 +75,12 @@
     $exception = $this->getException();
     if ($exception) {
       return pht(
-        'This rule (of type "%s") is invalid: %s',
+        'This Rule (of type "%s") is invalid: %s',
         $type,
         $exception->getMessage());
     } else {
       return pht(
-        'This rule (of type "%s") is invalid.',
+        'This Rule (of type "%s") is invalid.',
         $type);
     }
   }
diff --git a/src/applications/project/trigger/PhabricatorProjectTriggerManiphestOwnerRule.php b/src/applications/project/trigger/PhabricatorProjectTriggerManiphestOwnerRule.php
--- a/src/applications/project/trigger/PhabricatorProjectTriggerManiphestOwnerRule.php
+++ b/src/applications/project/trigger/PhabricatorProjectTriggerManiphestOwnerRule.php
@@ -6,7 +6,7 @@
   const TRIGGERTYPE = 'task.owner';
 
   public function getSelectControlName() {
-    return pht('Assign task to');
+    return pht('Assign Task to');
   }
 
   protected function getValueForEditorField() {
@@ -25,7 +25,7 @@
     if (!is_array($value)) {
       throw new Exception(
         pht(
-          'Owner rule value should be a list, but is not (value is "%s").',
+          'Owner Rule Value should be a list, but is not (value is "%s").',
           phutil_describe_type($value)));
     }
   }
@@ -34,14 +34,14 @@
     if (!$value) {
       throw new Exception(
         pht(
-          'Owner rule value is required. Specify a user to assign tasks '.
-          'to, or the token "none()" to unassign tasks.'));
+          'Owner Rule Value is required. Specify a User to assign Tasks '.
+          'to, or the token "none()" to unassign Tasks.'));
     }
 
     if (count($value) > 1) {
       throw new Exception(
         pht(
-          'Owner rule value must have only one elmement (value is "%s").',
+          'Owner Rule value must have only one element (value is "%s").',
           implode(', ', $value)));
     }
 
@@ -54,7 +54,7 @@
       if (!$user) {
         throw new Exception(
           pht(
-            'User PHID ("%s") is not a valid user.',
+            'User PHID ("%s") is not a valid User.',
             $owner_phid));
       }
     }
@@ -126,10 +126,10 @@
     $value = $this->convertTokenizerValueToOwner($value);
 
     if (!$value) {
-      return pht('Unassign task.');
+      return pht('Unassign Task.');
     } else {
       return pht(
-        'Assign task to %s.',
+        'Assign Task to %s.',
         phutil_tag(
           'strong',
           array(),
diff --git a/src/applications/project/trigger/PhabricatorProjectTriggerManiphestPriorityRule.php b/src/applications/project/trigger/PhabricatorProjectTriggerManiphestPriorityRule.php
--- a/src/applications/project/trigger/PhabricatorProjectTriggerManiphestPriorityRule.php
+++ b/src/applications/project/trigger/PhabricatorProjectTriggerManiphestPriorityRule.php
@@ -6,14 +6,14 @@
   const TRIGGERTYPE = 'task.priority';
 
   public function getSelectControlName() {
-    return pht('Change priority to');
+    return pht('Change Priority to');
   }
 
   protected function assertValidRuleRecordFormat($value) {
     if (!is_string($value)) {
       throw new Exception(
         pht(
-          'Priority rule value should be a string, but is not (value is "%s").',
+          'Priority Rule value should be a string, but is not (value is "%s").',
           phutil_describe_type($value)));
     }
   }
@@ -23,7 +23,7 @@
     if (!isset($map[$value])) {
       throw new Exception(
         pht(
-          'Task priority value ("%s") is not a valid task priority. '.
+          'Task Priority value ("%s") is not a valid Task Priority. '.
           'Valid priorities are: %s.',
           $value,
           implode(', ', array_keys($map))));
@@ -45,7 +45,7 @@
     $priority_color = ManiphestTaskPriority::getTaskPriorityColor($value);
 
     $content = pht(
-      'Change priority to %s.',
+      'Change Priority to %s.',
       phutil_tag('strong', array(), $priority_name));
 
     return array(
@@ -82,7 +82,7 @@
     $priority_name = ManiphestTaskPriority::getTaskPriorityName($value);
 
     return pht(
-      'Change task priority to %s.',
+      'Change Task Priority to %s.',
       phutil_tag('strong', array(), $priority_name));
   }
 
diff --git a/src/applications/project/trigger/PhabricatorProjectTriggerManiphestStatusRule.php b/src/applications/project/trigger/PhabricatorProjectTriggerManiphestStatusRule.php
--- a/src/applications/project/trigger/PhabricatorProjectTriggerManiphestStatusRule.php
+++ b/src/applications/project/trigger/PhabricatorProjectTriggerManiphestStatusRule.php
@@ -6,14 +6,14 @@
   const TRIGGERTYPE = 'task.status';
 
   public function getSelectControlName() {
-    return pht('Change status to');
+    return pht('Change Status to');
   }
 
   protected function assertValidRuleRecordFormat($value) {
     if (!is_string($value)) {
       throw new Exception(
         pht(
-          'Status rule value should be a string, but is not (value is "%s").',
+          'Status Rule value should be a string, but is not (value is "%s").',
           phutil_describe_type($value)));
     }
   }
@@ -23,8 +23,8 @@
     if (!isset($map[$value])) {
       throw new Exception(
         pht(
-          'Task status value ("%s") is not a valid task status. '.
-          'Valid statues are: %s.',
+          'Task Status value ("%s") is not a valid Task Status. '.
+          'Valid Statues are: %s.',
           $value,
           implode(', ', array_keys($map))));
     }
@@ -44,7 +44,7 @@
     $status_color = ManiphestTaskStatus::getStatusColor($value);
 
     $content = pht(
-      'Change status to %s.',
+      'Change Status to %s.',
       phutil_tag('strong', array(), $status_name));
 
     return array(
@@ -81,7 +81,7 @@
     $status_name = ManiphestTaskStatus::getTaskStatusName($value);
 
     return pht(
-      'Change task status to %s.',
+      'Change Task Status to %s.',
       phutil_tag('strong', array(), $status_name));
   }
 
diff --git a/src/applications/project/trigger/PhabricatorProjectTriggerPlaySoundRule.php b/src/applications/project/trigger/PhabricatorProjectTriggerPlaySoundRule.php
--- a/src/applications/project/trigger/PhabricatorProjectTriggerPlaySoundRule.php
+++ b/src/applications/project/trigger/PhabricatorProjectTriggerPlaySoundRule.php
@@ -6,14 +6,14 @@
   const TRIGGERTYPE = 'sound';
 
   public function getSelectControlName() {
-    return pht('Play sound');
+    return pht('Play Sound');
   }
 
   protected function assertValidRuleRecordFormat($value) {
     if (!is_string($value)) {
       throw new Exception(
         pht(
-          'Status rule value should be a string, but is not (value is "%s").',
+          'Status Rule value should be a string, but is not (value is "%s").',
           phutil_describe_type($value)));
     }
   }
@@ -38,7 +38,7 @@
     $sound_name = self::getSoundName($value);
 
     $content = pht(
-      'Play sound %s.',
+      'Play Sound %s.',
       phutil_tag('strong', array(), $sound_name));
 
     return array(
diff --git a/src/applications/project/trigger/PhabricatorProjectTriggerRemoveProjectsRule.php b/src/applications/project/trigger/PhabricatorProjectTriggerRemoveProjectsRule.php
--- a/src/applications/project/trigger/PhabricatorProjectTriggerRemoveProjectsRule.php
+++ b/src/applications/project/trigger/PhabricatorProjectTriggerRemoveProjectsRule.php
@@ -6,7 +6,7 @@
   const TRIGGERTYPE = 'task.projects.remove';
 
   public function getSelectControlname() {
-    return pht('Remove project tags');
+    return pht('Remove Project Tags');
   }
 
   protected function getValueForEditorField() {
@@ -17,7 +17,7 @@
     if (!is_array($value)) {
       throw new Exception(
         pht(
-          'Remove project rule value should be a list, but is not '.
+          'Remove Project Rule value should be a list, but is not '.
           '(value is "%s").',
           phutil_describe_type($value)));
     }
@@ -27,7 +27,7 @@
     if (!$value) {
       throw new Exception(
         pht(
-          'You must select at least one project tag to remove.'));
+          'You must select at least one Project Tag to remove.'));
     }
   }
 
@@ -91,7 +91,7 @@
 
   public function getRuleViewDescription($value) {
     return pht(
-      'Remove project tags: %s.',
+      'Remove Project Tags: %s.',
       phutil_tag(
         'strong',
         array(),
diff --git a/src/applications/project/trigger/PhabricatorProjectTriggerUnknownRule.php b/src/applications/project/trigger/PhabricatorProjectTriggerUnknownRule.php
--- a/src/applications/project/trigger/PhabricatorProjectTriggerUnknownRule.php
+++ b/src/applications/project/trigger/PhabricatorProjectTriggerUnknownRule.php
@@ -35,7 +35,7 @@
         ->setIcon('fa-exclamation-triangle yellow'),
       ' ',
       pht(
-        'This is a trigger rule with a unknown type ("%s").',
+        'This is a Trigger Rule with a unknown type ("%s").',
         $this->getRecord()->getType()),
     );
   }
@@ -58,8 +58,8 @@
 
   public function getRuleViewDescription($value) {
     return pht(
-      'This is an unknown rule of type "%s". An administrator may have '.
-      'edited or removed an extension which implements this rule type.',
+      'This is an unknown Rule of type "%s". An Administrator may have '.
+      'edited or removed an extension which implements this Rule type.',
       $this->getRecord()->getType());
   }