diff --git a/src/aphront/AphrontRequest.php b/src/aphront/AphrontRequest.php
--- a/src/aphront/AphrontRequest.php
+++ b/src/aphront/AphrontRequest.php
@@ -56,8 +56,8 @@
    * Applications like Paste, Diffusion, and Harbormaster use "$12-14" in the
    * URI to allow users to link to particular lines.
    *
-   * @param string URI data key to pull line range information from.
-   * @param int|null Maximum length of the range.
+   * @param string $key URI data key to pull line range information from.
+   * @param int|null $limit Maximum length of the range.
    * @return null|pair<int, int> Null, or beginning and end of the range.
    */
   public function getURILineRange($key, $limit) {
@@ -537,8 +537,8 @@
    *
    * To set a temporary cookie, see @{method:setTemporaryCookie}.
    *
-   * @param string  Cookie name.
-   * @param string  Cookie value.
+   * @param string $name Cookie name.
+   * @param string $value Cookie value.
    * @return this
    * @task cookie
    */
@@ -553,8 +553,8 @@
    *
    * To set a durable cookie, see @{method:setCookie}.
    *
-   * @param string  Cookie name.
-   * @param string  Cookie value.
+   * @param string $name Cookie name.
+   * @param string $value Cookie value.
    * @return this
    * @task cookie
    */
@@ -566,9 +566,9 @@
   /**
    * Set a cookie with a given expiration policy.
    *
-   * @param string  Cookie name.
-   * @param string  Cookie value.
-   * @param int     Epoch timestamp for cookie expiration.
+   * @param string $name Cookie name.
+   * @param string $value Cookie value.
+   * @param int    $expire Epoch timestamp for cookie expiration.
    * @return this
    * @task cookie
    */
@@ -748,7 +748,7 @@
    * into a list of key-value pairs suitable for submitting via HTTP request
    * (with arrays flattened).
    *
-   * @param   dict<string, wild>    Data to flatten.
+   * @param   dict<string, wild>    $data Data to flatten.
    * @return  dict<string, string>  Flat data suitable for inclusion in an HTTP
    *                                request.
    */
@@ -778,9 +778,11 @@
    * and looks up the appropriate value in `$_SERVER` (in this case,
    * `"HTTP_ACCEPT_ENCODING"`).
    *
-   * @param   string        Canonical header name, like `"Accept-Encoding"`.
-   * @param   wild          Default value to return if header is not present.
-   * @param   array?        Read this instead of `$_SERVER`.
+   * @param   string        $name Canonical header name, like
+        `"Accept-Encoding"`.
+   * @param   wild?         $default Default value to return if header is not
+        present.
+   * @param   array?        $data Read this instead of `$_SERVER`.
    * @return  string|wild   Header value if present, or `$default` if not.
    */
   public static function getHTTPHeader($name, $default = null, $data = null) {
@@ -844,7 +846,7 @@
    * This is not a general-purpose proxying method; it is a specialized
    * method with niche applications and severe security implications.
    *
-   * @param string URI identifying the host we are proxying the request to.
+   * @param string URI $uri identifying the host we are proxying the request to.
    * @return HTTPSFuture New proxy future.
    *
    * @phutil-external-symbol class PhabricatorStartup
diff --git a/src/aphront/configuration/AphrontApplicationConfiguration.php b/src/aphront/configuration/AphrontApplicationConfiguration.php
--- a/src/aphront/configuration/AphrontApplicationConfiguration.php
+++ b/src/aphront/configuration/AphrontApplicationConfiguration.php
@@ -510,8 +510,8 @@
    * Map a specific path to the corresponding controller. For a description
    * of routing, see @{method:buildController}.
    *
-   * @param list<AphrontRoutingMap> List of routing maps.
-   * @param string Path to route.
+   * @param list<AphrontRoutingMap> $maps List of routing maps.
+   * @param string $path Path to route.
    * @return pair<AphrontController,dict> Controller and dictionary of request
    *                                      parameters.
    * @task routing
@@ -562,7 +562,7 @@
   /**
    * Tests if a response is of a valid type.
    *
-   * @param wild Supposedly valid response.
+   * @param wild $response Supposedly valid response.
    * @return bool True if the object is of a valid type.
    * @task response
    */
@@ -583,8 +583,9 @@
    * Verifies that the return value from an @{class:AphrontController} is
    * of an allowed type.
    *
-   * @param AphrontController Controller which returned the response.
-   * @param wild Supposedly valid response.
+   * @param AphrontController $controller Controller which returned the
+   *   response.
+   * @param wild $response Supposedly valid response.
    * @return void
    * @task response
    */
@@ -612,9 +613,9 @@
    * Verifies that the return value from an
    * @{class:AphrontResponseProducerInterface} is of an allowed type.
    *
-   * @param AphrontResponseProducerInterface Object which produced
+   * @param AphrontResponseProducerInterface $producer Object which produced
    *   this response.
-   * @param wild Supposedly valid response.
+   * @param wild $response Supposedly valid response.
    * @return void
    * @task response
    */
@@ -642,9 +643,9 @@
    * Verifies that the return value from an
    * @{class:AphrontRequestExceptionHandler} is of an allowed type.
    *
-   * @param AphrontRequestExceptionHandler Object which produced this
+   * @param AphrontRequestExceptionHandler $handler Object which produced this
    *  response.
-   * @param wild Supposedly valid response.
+   * @param wild $response Supposedly valid response.
    * @return void
    * @task response
    */
@@ -678,9 +679,9 @@
    * If a controller returns a response producer, invoke it now and produce
    * the real response.
    *
-   * @param AphrontRequest Request being handled.
-   * @param AphrontResponse|AphrontResponseProducerInterface Response, or
-   *   response producer.
+   * @param AphrontRequest $request Request being handled.
+   * @param AphrontResponse|AphrontResponseProducerInterface $response
+   *   Response, or response producer.
    * @return AphrontResponse Response after any required production.
    * @task response
    */
@@ -738,7 +739,7 @@
    * This method delegates exception handling to available subclasses of
    * @{class:AphrontRequestExceptionHandler}.
    *
-   * @param Throwable Exception which needs to be handled.
+   * @param Throwable $throwable Exception which needs to be handled.
    * @return wild Response or response producer, or null if no available
    *   handler can produce a response.
    * @task exception
diff --git a/src/aphront/httpparametertype/AphrontHTTPParameterType.php b/src/aphront/httpparametertype/AphrontHTTPParameterType.php
--- a/src/aphront/httpparametertype/AphrontHTTPParameterType.php
+++ b/src/aphront/httpparametertype/AphrontHTTPParameterType.php
@@ -31,7 +31,7 @@
    * example, a type might lookup usernames or project names. These types need
    * to use the current viewer to execute queries.
    *
-   * @param PhabricatorUser Current viewer.
+   * @param PhabricatorUser $viewer Current viewer.
    * @return this
    * @task read
    */
@@ -58,8 +58,8 @@
   /**
    * Test if a value is present in a request.
    *
-   * @param AphrontRequest The incoming request.
-   * @param string The key to examine.
+   * @param AphrontRequest $request The incoming request.
+   * @param string $key The key to examine.
    * @return bool True if a readable value is present in the request.
    * @task read
    */
@@ -74,8 +74,8 @@
    * If the value is not present, a default value is returned (usually `null`).
    * Use @{method:getExists} to test if a value is present.
    *
-   * @param AphrontRequest The incoming request.
-   * @param string The key to examine.
+   * @param AphrontRequest $request The incoming request.
+   * @param string $key The key to examine.
    * @return wild Value, or default if value is not present.
    * @task read
    */
@@ -165,9 +165,9 @@
    * existence check that a simpler "list of strings" type has, and can just
    * call the simpler type to reuse its behavior.
    *
-   * @param AphrontHTTPParameterType The other type.
-   * @param AphrontRequest Incoming request.
-   * @param string Key to examine.
+   * @param AphrontHTTPParameterType $type The other type.
+   * @param AphrontRequest $request Incoming request.
+   * @param string $key Key to examine.
    * @return bool True if the parameter exists.
    * @task util
    */
@@ -189,9 +189,9 @@
    * type. For example, a "list of users" type may start by running the same
    * basic parsing that a simpler "list of strings" type does.
    *
-   * @param AphrontHTTPParameterType The other type.
-   * @param AphrontRequest Incoming request.
-   * @param string Key to examine.
+   * @param AphrontHTTPParameterType $type The other type.
+   * @param AphrontRequest $request Incoming request.
+   * @param string $key Key to examine.
    * @return wild Parsed value.
    * @task util
    */
@@ -233,8 +233,8 @@
    * To call another type's behavior in order to perform this check, use
    * @{method:getExistsWithType}.
    *
-   * @param AphrontRequest The incoming request.
-   * @param string The key to examine.
+   * @param AphrontRequest $request The incoming request.
+   * @param string $key The key to examine.
    * @return bool True if a readable value is present in the request.
    * @task impl
    */
@@ -253,8 +253,8 @@
    * To call another type's behavior in order to parse a value, use
    * @{method:getValueWithType}.
    *
-   * @param AphrontRequest The incoming request.
-   * @param string The key to examine.
+   * @param AphrontRequest $request The incoming request.
+   * @param string $key The key to examine.
    * @return wild Parsed value.
    * @task impl
    */
diff --git a/src/aphront/response/AphrontFileResponse.php b/src/aphront/response/AphrontFileResponse.php
--- a/src/aphront/response/AphrontFileResponse.php
+++ b/src/aphront/response/AphrontFileResponse.php
@@ -30,7 +30,7 @@
   /**
    * Set a download filename
    *
-   * @param $download string
+   * @param string $download
    * @return self
    */
   public function setDownload($download) {
diff --git a/src/aphront/response/AphrontRedirectResponse.php b/src/aphront/response/AphrontRedirectResponse.php
--- a/src/aphront/response/AphrontRedirectResponse.php
+++ b/src/aphront/response/AphrontRedirectResponse.php
@@ -117,8 +117,9 @@
    * ambiguity. For example, Chrome interprets "Location: /\evil.com" to mean
    * "perform a protocol-relative redirect to evil.com".
    *
-   * @param   string  URI to redirect to.
-   * @param   bool    True if this URI identifies a remote resource.
+   * @param   string  $uri URI to redirect to.
+   * @param   bool    $is_external True if this URI identifies a remote
+   *   resource.
    * @return  string  URI for use in a "Location:" header.
    */
   public static function getURIForRedirect($uri, $is_external) {
diff --git a/src/aphront/sink/AphrontHTTPSink.php b/src/aphront/sink/AphrontHTTPSink.php
--- a/src/aphront/sink/AphrontHTTPSink.php
+++ b/src/aphront/sink/AphrontHTTPSink.php
@@ -28,7 +28,8 @@
   /**
    * Write an HTTP status code to the output.
    *
-   * @param int Numeric HTTP status code.
+   * @param int $code Numeric HTTP status code.
+   * @param string? $message
    * @return void
    */
   final public function writeHTTPStatus($code, $message = '') {
@@ -44,7 +45,7 @@
   /**
    * Write HTTP headers to the output.
    *
-   * @param list<pair> List of <name, value> pairs.
+   * @param list<pair> $headers List of <name, value> pairs.
    * @return void
    */
   final public function writeHeaders(array $headers) {
@@ -89,7 +90,7 @@
   /**
    * Write HTTP body data to the output.
    *
-   * @param string Body data.
+   * @param string $data Body data.
    * @return void
    */
   final public function writeData($data) {
@@ -100,7 +101,7 @@
   /**
    * Write an entire @{class:AphrontResponse} to the output.
    *
-   * @param AphrontResponse The response object to write.
+   * @param AphrontResponse $response The response object to write.
    * @return void
    */
   final public function writeResponse(AphrontResponse $response) {
diff --git a/src/aphront/site/AphrontRoutingMap.php b/src/aphront/site/AphrontRoutingMap.php
--- a/src/aphront/site/AphrontRoutingMap.php
+++ b/src/aphront/site/AphrontRoutingMap.php
@@ -50,7 +50,7 @@
   /**
    * Find the route matching a path, if one exists.
    *
-   * @param string Path to route.
+   * @param string $path Path to route.
    * @return AphrontRoutingResult|null Routing result, if path matches map.
    * @task routing
    */
@@ -84,9 +84,9 @@
   /**
    * Test a sub-map to see if any routes match a path.
    *
-   * @param string Path to route.
-   * @param string Pattern from the map.
-   * @param string Value from the map.
+   * @param string $route Pattern from the map.
+   * @param string $value Value from the map.
+   * @param string $path Path to route.
    * @return dict<string, wild>|null Match details, if path matches sub-map.
    * @task routing
    */
diff --git a/src/aphront/writeguard/AphrontWriteGuard.php b/src/aphront/writeguard/AphrontWriteGuard.php
--- a/src/aphront/writeguard/AphrontWriteGuard.php
+++ b/src/aphront/writeguard/AphrontWriteGuard.php
@@ -57,7 +57,7 @@
    * the request, or abort the request (e.g., by throwing an exception) if a
    * valid token isn't present.
    *
-   * @param   callable CSRF callback.
+   * @param   $callback Callable CSRF callback.
    * @return  this
    * @task    manage
    */
diff --git a/src/applications/auth/constants/PhabricatorCommonPasswords.php b/src/applications/auth/constants/PhabricatorCommonPasswords.php
--- a/src/applications/auth/constants/PhabricatorCommonPasswords.php
+++ b/src/applications/auth/constants/PhabricatorCommonPasswords.php
@@ -16,7 +16,7 @@
   /**
    * Check if a password is extremely common.
    *
-   * @param   string  Password to test.
+   * @param   string  $password Password to test.
    * @return  bool    True if the password is pathologically weak.
    *
    * @task common
diff --git a/src/applications/auth/constants/PhabricatorCookies.php b/src/applications/auth/constants/PhabricatorCookies.php
--- a/src/applications/auth/constants/PhabricatorCookies.php
+++ b/src/applications/auth/constants/PhabricatorCookies.php
@@ -77,7 +77,7 @@
    * Set the client ID cookie. This is a random cookie used like a CSRF value
    * during authentication workflows.
    *
-   * @param AphrontRequest  Request to modify.
+   * @param AphrontRequest $request Request to modify.
    * @return void
    * @task clientid
    */
@@ -105,10 +105,10 @@
    * written, to avoid writing over a real URI with a bunch of "humans.txt"
    * stuff. See T3793 for discussion.
    *
-   * @param   AphrontRequest    Request to write to.
-   * @param   string            URI to write.
-   * @param   bool              Write this cookie even if we have a fresh
-   *                            cookie already.
+   * @param   AphrontRequest    $request Request to write to.
+   * @param   string            $next_uri URI to write.
+   * @param   bool?             $force Write this cookie even if we have a
+   *                            fresh cookie already.
    * @return  void
    *
    * @task next
@@ -139,7 +139,7 @@
   /**
    * Read the URI out of the Next URI cookie.
    *
-   * @param   AphrontRequest  Request to examine.
+   * @param   AphrontRequest  $request Request to examine.
    * @return  string|null     Next URI cookie's URI value.
    *
    * @task next
@@ -155,7 +155,7 @@
   /**
    * Parse a Next URI cookie into its components.
    *
-   * @param   string        Raw cookie value.
+   * @param   string        $cookie Raw cookie value.
    * @return  list<string>  List of timestamp and URI.
    *
    * @task next
diff --git a/src/applications/auth/controller/PhabricatorAuthController.php b/src/applications/auth/controller/PhabricatorAuthController.php
--- a/src/applications/auth/controller/PhabricatorAuthController.php
+++ b/src/applications/auth/controller/PhabricatorAuthController.php
@@ -44,8 +44,9 @@
    * the user's cookies are set. However, event listeners can intercept this
    * event and do something else if they prefer.
    *
-   * @param   PhabricatorUser   User to log the viewer in as.
-   * @param bool True to issue a full session immediately, bypassing MFA.
+   * @param   PhabricatorUser $user User to log the viewer in as.
+   * @param bool? $force_full_session True to issue a full session immediately,
+   *   bypassing MFA.
    * @return  AphrontResponse   Response which continues the login process.
    */
   protected function loginUser(
diff --git a/src/applications/auth/engine/PhabricatorAuthSessionEngine.php b/src/applications/auth/engine/PhabricatorAuthSessionEngine.php
--- a/src/applications/auth/engine/PhabricatorAuthSessionEngine.php
+++ b/src/applications/auth/engine/PhabricatorAuthSessionEngine.php
@@ -75,7 +75,7 @@
    * Get the session kind (e.g., anonymous, user, external account) from a
    * session token. Returns a `KIND_` constant.
    *
-   * @param   string  Session token.
+   * @param   string  $session_token Session token.
    * @return  const   Session kind constant.
    */
   public static function getSessionKindFromToken($session_token) {
@@ -109,8 +109,8 @@
    * loading context. This prevents use of a Conduit sesssion as a Web
    * session, for example.
    *
-   * @param const The type of session to load.
-   * @param string The session token.
+   * @param const $session_type The type of session to load.
+   * @param string $session_token The session token.
    * @return PhabricatorUser|null
    * @task use
    */
@@ -250,11 +250,12 @@
    * You can configure the maximum number of concurrent sessions for various
    * session types in the Phabricator configuration.
    *
-   * @param   const     Session type constant (see
+   * @param   const     $session_type Session type constant (see
    *                    @{class:PhabricatorAuthSession}).
-   * @param   phid|null Identity to establish a session for, usually a user
-   *                    PHID. With `null`, generates an anonymous session.
-   * @param   bool      True to issue a partial session.
+   * @param   phid|null $identity_phid Identity to establish a session for,
+   *                    usually a user PHID. With `null`, generates an
+   *                    anonymous session.
+   * @param   bool      $partial True to issue a partial session.
    * @return  string    Newly generated session key.
    */
   public function establishSession($session_type, $identity_phid, $partial) {
@@ -325,9 +326,9 @@
    * This is used when users change passwords, linked accounts, or add
    * multifactor authentication.
    *
-   * @param PhabricatorUser User whose sessions should be terminated.
-   * @param string|null Optionally, one session to keep. Normally, the current
-   *   login session.
+   * @param PhabricatorUser $user User whose sessions should be terminated.
+   * @param string|null? $except_session Optionally, one session to keep.
+   *   Normally, the current login session.
    *
    * @return void
    */
@@ -388,9 +389,11 @@
    * does not upgrade the user's session as a side effect. This method is
    * appropriate for one-time checks.
    *
-   * @param PhabricatorUser User whose session needs to be in high security.
-   * @param AphrontRequest  Current request.
-   * @param string          URI to return the user to if they cancel.
+   * @param PhabricatorUser $viewer User whose session needs to be in high
+   *   security.
+   * @param AphrontRequest  $request Current request.
+   * @param string          $cancel_uri URI to return the user to if they
+   *   cancel.
    * @return PhabricatorAuthHighSecurityToken Security token.
    * @task hisec
    */
@@ -420,12 +423,14 @@
    * take multiple high security actions. To perform a one-time check instead,
    * use @{method:requireHighSecurityToken}.
    *
-   * @param PhabricatorUser User whose session needs to be in high security.
-   * @param AphrontRequest  Current request.
-   * @param string          URI to return the user to if they cancel.
-   * @param bool            True to jump partial sessions directly into high
-   *                        security instead of just upgrading them to full
-   *                        sessions.
+   * @param PhabricatorUser $viewer User whose session needs to be in high
+   *                        security.
+   * @param AphrontRequest  $request Current request.
+   * @param string          $cancel_uri URI to return the user to if they
+   *                        cancel.
+   * @param bool?           $jump_into_hisec True to jump partial sessions
+   *                        directly into high security instead of just
+   *                        upgrading them to full sessions.
    * @return PhabricatorAuthHighSecurityToken Security token.
    * @task hisec
    */
@@ -736,8 +741,8 @@
   /**
    * Issue a high security token for a session, if authorized.
    *
-   * @param PhabricatorAuthSession Session to issue a token for.
-   * @param bool Force token issue.
+   * @param PhabricatorAuthSession $session Session to issue a token for.
+   * @param bool? $force Force token issue.
    * @return PhabricatorAuthHighSecurityToken|null Token, if authorized.
    * @task hisec
    */
@@ -756,8 +761,10 @@
   /**
    * Render a form for providing relevant multi-factor credentials.
    *
-   * @param PhabricatorUser Viewing user.
-   * @param AphrontRequest Current request.
+   * @param array $factors
+   * @param array $validation_results
+   * @param PhabricatorUser $viewer Viewing user.
+   * @param AphrontRequest $request Current request.
    * @return AphrontFormView Renderable form.
    * @task hisec
    */
@@ -810,8 +817,9 @@
    *
    * Kicks a session out of high security and logs the exit.
    *
-   * @param PhabricatorUser Acting user.
-   * @param PhabricatorAuthSession Session to return to normal security.
+   * @param PhabricatorUser $viewer Acting user.
+   * @param PhabricatorAuthSession $session Session to return to normal
+   *  security.
    * @return void
    * @task hisec
    */
@@ -843,7 +851,7 @@
   /**
    * Upgrade a partial session to a full session.
    *
-   * @param PhabricatorAuthSession Session to upgrade.
+   * @param PhabricatorUser $viewer Viewer whose session should upgrade.
    * @return void
    * @task partial
    */
@@ -885,8 +893,8 @@
   /**
    * Upgrade a session to have all legalpad documents signed.
    *
-   * @param PhabricatorUser User whose session should upgrade.
-   * @param array LegalpadDocument objects
+   * @param PhabricatorUser $viewer User whose session should upgrade.
+   * @param array $docs LegalpadDocument objects
    * @return void
    * @task partial
    */
@@ -934,13 +942,14 @@
    * These URIs are used for password recovery and to regain access to accounts
    * which users have been locked out of.
    *
-   * @param PhabricatorUser User to generate a URI for.
-   * @param PhabricatorUserEmail Optionally, email to verify when
+   * @param PhabricatorUser $user User to generate a URI for.
+   * @param PhabricatorUserEmail? $email Optionally, email to verify when
    *  link is used.
-   * @param string Optional context string for the URI. This is purely cosmetic
-   *  and used only to customize workflow and error messages.
-   * @param bool True to generate a URI which forces an immediate upgrade to
-   *  a full session, bypassing MFA and other login checks.
+   * @param string? $type Optional context string for the URI. This is purely
+   *  cosmetic and used only to customize workflow and error messages.
+   * @param bool? $force_full_session True to generate a URI which forces an
+   *  immediate upgrade to a full session, bypassing MFA and other login
+   *  checks.
    * @return string Login URI.
    * @task onetime
    */
@@ -984,10 +993,10 @@
   /**
    * Load the temporary token associated with a given one-time login key.
    *
-   * @param PhabricatorUser User to load the token for.
-   * @param PhabricatorUserEmail Optionally, email to verify when
+   * @param PhabricatorUser $user User to load the token for.
+   * @param PhabricatorUserEmail? $email Optionally, email to verify when
    *  link is used.
-   * @param string Key user is presenting as a valid one-time login key.
+   * @param string? $key Key user is presenting as a valid one-time login key.
    * @return PhabricatorAuthTemporaryToken|null Token, if one exists.
    * @task onetime
    */
@@ -1012,10 +1021,10 @@
   /**
    * Hash a one-time login key for storage as a temporary token.
    *
-   * @param PhabricatorUser User this key is for.
-   * @param PhabricatorUserEmail Optionally, email to verify when
+   * @param PhabricatorUser $user User this key is for.
+   * @param PhabricatorUserEmail? $email Optionally, email to verify when
    *  link is used.
-   * @param string The one time login key.
+   * @param string? $key The one time login key.
    * @return string Hash of the key.
    * task onetime
    */
diff --git a/src/applications/auth/password/PhabricatorAuthPasswordHashInterface.php b/src/applications/auth/password/PhabricatorAuthPasswordHashInterface.php
--- a/src/applications/auth/password/PhabricatorAuthPasswordHashInterface.php
+++ b/src/applications/auth/password/PhabricatorAuthPasswordHashInterface.php
@@ -14,8 +14,8 @@
    * as their password or picking other passwords which are trivially similar
    * to an account or object identifier.
    *
-   * @param PhabricatorUser The user selecting the password.
-   * @param PhabricatorAuthPasswordEngine The password engine updating a
+   * @param PhabricatorUser $viewer The user selecting the password.
+   * @param PhabricatorAuthPasswordEngine $engine The password engine updating a
    *  password.
    * @return list<string> Blocklist of nonsecret identifiers which the password
    *  should not be similar to.
diff --git a/src/applications/auth/provider/PhabricatorAuthProvider.php b/src/applications/auth/provider/PhabricatorAuthProvider.php
--- a/src/applications/auth/provider/PhabricatorAuthProvider.php
+++ b/src/applications/auth/provider/PhabricatorAuthProvider.php
@@ -460,9 +460,9 @@
    *   - `uri`: URI the button should take the user to when clicked.
    *   - `method`: Optional HTTP method the button should use, defaults to GET.
    *
-   * @param   AphrontRequest  HTTP request.
-   * @param   string          Request mode string.
-   * @param   map             Additional parameters, see above.
+   * @param   AphrontRequest $request HTTP request.
+   * @param   string         $mode Request mode string.
+   * @param   map?           $attributes Additional parameters, see above.
    * @return  wild            Log in button.
    */
   protected function renderStandardLoginButton(
diff --git a/src/applications/base/PhabricatorApplication.php b/src/applications/base/PhabricatorApplication.php
--- a/src/applications/base/PhabricatorApplication.php
+++ b/src/applications/base/PhabricatorApplication.php
@@ -141,7 +141,7 @@
    *
    * Users who have not yet set preferences see a default list of applications.
    *
-   * @param PhabricatorUser User viewing the pinned application list.
+   * @param PhabricatorUser $viewer User viewing the pinned application list.
    * @return bool True if this application should be pinned by default.
    */
   public function isPinnedByDefault(PhabricatorUser $viewer) {
@@ -330,9 +330,9 @@
   /**
    * Build items for the main menu.
    *
-   * @param  PhabricatorUser    The viewing user.
-   * @param  AphrontController  The current controller. May be null for special
-   *                            pages like 404, exception handlers, etc.
+   * @param  PhabricatorUser    $user The viewing user.
+   * @param  AphrontController? $controller The current controller. May be null
+   *   for special pages like 404, exception handlers, etc.
    * @return list<PHUIListItemView> List of menu items.
    * @task ui
    */
@@ -409,7 +409,7 @@
    * To check if an application is installed //and// available to a particular
    * viewer, user @{method:isClassInstalledForViewer}.
    *
-   * @param string  Application class name.
+   * @param string $class Application class name.
    * @return bool   True if the class is installed.
    * @task meta
    */
@@ -425,8 +425,8 @@
    * To check if an application is installed at all, use
    * @{method:isClassInstalled}.
    *
-   * @param string Application class name.
-   * @param PhabricatorUser Viewing user.
+   * @param string $class Application class name.
+   * @param PhabricatorUser $viewer Viewing user.
    * @return bool True if the class is installed for the viewer.
    * @task meta
    */
diff --git a/src/applications/cache/PhabricatorCaches.php b/src/applications/cache/PhabricatorCaches.php
--- a/src/applications/cache/PhabricatorCaches.php
+++ b/src/applications/cache/PhabricatorCaches.php
@@ -416,7 +416,7 @@
    *
    * Data can later be inflated with @{method:inflateData}.
    *
-   * @param string String to attempt to deflate.
+   * @param string $value String to attempt to deflate.
    * @return string|null Deflated string, or null if it was not deflated.
    * @task compress
    */
@@ -447,7 +447,7 @@
   /**
    * Inflate data previously deflated by @{method:maybeDeflateData}.
    *
-   * @param string Deflated data, from @{method:maybeDeflateData}.
+   * @param string $value Deflated data, from @{method:maybeDeflateData}.
    * @return string Original, uncompressed data.
    * @task compress
    */
diff --git a/src/applications/celerity/CelerityResourceMap.php b/src/applications/celerity/CelerityResourceMap.php
--- a/src/applications/celerity/CelerityResourceMap.php
+++ b/src/applications/celerity/CelerityResourceMap.php
@@ -160,7 +160,7 @@
   /**
    * Get the epoch timestamp of the last modification time of a symbol.
    *
-   * @param string Resource symbol to lookup.
+   * @param string $name Resource symbol to lookup.
    * @return int Epoch timestamp of last resource modification.
    */
   public function getModifiedTimeForName($name) {
@@ -186,7 +186,7 @@
    * Return the absolute URI for the resource associated with a symbol. This
    * method is fairly low-level and ignores packaging.
    *
-   * @param string Resource symbol to lookup.
+   * @param string $symbol Resource symbol to lookup.
    * @return string|null Resource URI, or null if the symbol is unknown.
    */
   public function getURIForSymbol($symbol) {
@@ -199,7 +199,7 @@
    * Return the absolute URI for the resource associated with a resource name.
    * This method is fairly low-level and ignores packaging.
    *
-   * @param string Resource name to lookup.
+   * @param string $name Resource name to lookup.
    * @return string|null  Resource URI, or null if the name is unknown.
    */
   public function getURIForName($name) {
@@ -217,7 +217,7 @@
    * Return the absolute URI for a resource, identified by hash.
    * This method is fairly low-level and ignores packaging.
    *
-   * @param string Resource hash to lookup.
+   * @param string $hash Resource hash to lookup.
    * @return string|null Resource URI, or null if the hash is unknown.
    */
   private function getURIForHash($hash) {
@@ -231,7 +231,7 @@
   /**
    * Return the resource symbols required by a named resource.
    *
-   * @param string Resource name to lookup.
+   * @param string $name Resource name to lookup.
    * @return list<string>|null  List of required symbols, or null if the name
    *                            is unknown.
    */
@@ -247,7 +247,7 @@
   /**
    * Return the resource name for a given symbol.
    *
-   * @param string Resource symbol to lookup.
+   * @param string $symbol Resource symbol to lookup.
    * @return string|null Resource name, or null if the symbol is unknown.
    */
   public function getResourceNameForSymbol($symbol) {
diff --git a/src/applications/celerity/CelerityResourceMapGenerator.php b/src/applications/celerity/CelerityResourceMapGenerator.php
--- a/src/applications/celerity/CelerityResourceMapGenerator.php
+++ b/src/applications/celerity/CelerityResourceMapGenerator.php
@@ -146,7 +146,8 @@
    * Find binary resources (like PNG and SWF) and return information about
    * them.
    *
-   * @param CelerityPhysicalResources Resource map to find binary resources for.
+   * @param CelerityPhysicalResources $resources Resource map to find binary
+   *                                  resources for.
    * @return map<string, map<string, string>> Resource information map.
    */
   private function rebuildBinaryResources(
@@ -170,8 +171,10 @@
   /**
    * Find text resources (like JS and CSS) and return information about them.
    *
-   * @param CelerityPhysicalResources Resource map to find text resources for.
-   * @param CelerityResourceTransformer Configured resource transformer.
+   * @param CelerityPhysicalResources $resources Resource map to find text
+   *                                  resources for.
+   * @param CelerityResourceTransformer $xformer Configured resource
+   *                                    transformer.
    * @return map<string, map<string, string>> Resource information map.
    */
   private function rebuildTextResources(
@@ -211,8 +214,8 @@
    * Parse the `@provides` and `@requires` symbols out of a text resource, like
    * JS or CSS.
    *
-   * @param string Resource name.
-   * @param string Resource data.
+   * @param string $name Resource name.
+   * @param string $data Resource data.
    * @return pair<string|null, list<string>|null> The `@provides` symbol and
    *    the list of `@requires` symbols. If the resource is not part of the
    *    dependency graph, both are null.
@@ -254,8 +257,8 @@
    * Check for dependency cycles in the resource graph. Raises an exception if
    * a cycle is detected.
    *
-   * @param map<string, list<string>> Map of `@provides` symbols to their
-   *                                  `@requires` symbols.
+   * @param map<string, list<string>> $nodes Map of `@provides` symbols to
+   *                                  their `@requires` symbols.
    * @return void
    */
   private function detectGraphCycles(array $nodes) {
@@ -278,9 +281,9 @@
   /**
    * Build package specifications for a given resource source.
    *
-   * @param CelerityPhysicalResources Resource source to rebuild.
-   * @param map<string, string> Map of `@provides` to hashes.
-   * @param map<string, string> Map of hashes to resource names.
+   * @param CelerityPhysicalResources $resources Resource source to rebuild.
+   * @param map<string, string> $symbol_map Map of `@provides` to hashes.
+   * @param map<string, string> $reverse_map Map of hashes to resource names.
    * @return map<string, map<string, string>> Package information maps.
    */
   private function rebuildPackages(
diff --git a/src/applications/celerity/CelerityResourceTransformer.php b/src/applications/celerity/CelerityResourceTransformer.php
--- a/src/applications/celerity/CelerityResourceTransformer.php
+++ b/src/applications/celerity/CelerityResourceTransformer.php
@@ -228,7 +228,8 @@
    * small enough. Otherwise, this method will return `null` and we'll end up
    * using a normal URI instead.
    *
-   * @param string  Resource name to attempt to generate a data URI for.
+   * @param string $resource_name Resource name to attempt to generate a data
+   *               URI for.
    * @return string|null Data URI, or null if we declined to generate one.
    */
   private function generateDataURI($resource_name) {
diff --git a/src/applications/celerity/api.php b/src/applications/celerity/api.php
--- a/src/applications/celerity/api.php
+++ b/src/applications/celerity/api.php
@@ -9,8 +9,9 @@
  *
  * For more information, see @{article:Adding New CSS and JS}.
  *
- * @param string Name of the celerity module to include. This is whatever you
- *               annotated as "@provides" in the file.
+ * @param string $symbol Name of the celerity module to include. This is
+ *               whatever you annotated as "@provides" in the file.
+ * @param string? $source_name
  * @return void
  */
 function require_celerity_resource($symbol, $source_name = 'phabricator') {
@@ -40,7 +41,8 @@
 /**
  * Get the versioned URI for a raw resource, like an image.
  *
- * @param   string  Path to the raw image.
+ * @param   string  $resource Path to the raw image.
+ * @param   string? $source
  * @return  string  Versioned path to the image, if one is available.
  */
 function celerity_get_resource_uri($resource, $source = 'phabricator') {
diff --git a/src/applications/celerity/controller/CelerityResourceController.php b/src/applications/celerity/controller/CelerityResourceController.php
--- a/src/applications/celerity/controller/CelerityResourceController.php
+++ b/src/applications/celerity/controller/CelerityResourceController.php
@@ -194,7 +194,7 @@
    * are cached, while other types of resources (which are large, and cheap
    * to process) are not.
    *
-   * @param string  Resource type.
+   * @param string  $type Resource type.
    * @return bool   True to enable caching.
    */
   private function isLocallyCacheableResourceType($type) {
diff --git a/src/applications/celerity/management/CelerityManagementMapWorkflow.php b/src/applications/celerity/management/CelerityManagementMapWorkflow.php
--- a/src/applications/celerity/management/CelerityManagementMapWorkflow.php
+++ b/src/applications/celerity/management/CelerityManagementMapWorkflow.php
@@ -32,7 +32,7 @@
   /**
    * Rebuild the resource map for a resource source.
    *
-   * @param CelerityPhysicalResources Resource source to rebuild.
+   * @param $resources CelerityPhysicalResources Resource source to rebuild.
    * @return void
    */
   private function rebuildResources(CelerityPhysicalResources $resources) {
diff --git a/src/applications/conduit/controller/PhabricatorConduitAPIController.php b/src/applications/conduit/controller/PhabricatorConduitAPIController.php
--- a/src/applications/conduit/controller/PhabricatorConduitAPIController.php
+++ b/src/applications/conduit/controller/PhabricatorConduitAPIController.php
@@ -159,8 +159,9 @@
   /**
    * Authenticate the client making the request to a Phabricator user account.
    *
-   * @param   ConduitAPIRequest Request being executed.
-   * @param   dict              Request metadata.
+   * @param   ConduitAPIRequest $api_request Request being executed.
+   * @param   dict              $metadata Request metadata.
+   * @param   wild              $method
    * @return  null|pair         Null to indicate successful authentication, or
    *                            an error code and error message pair.
    */
diff --git a/src/applications/conduit/protocol/exception/ConduitException.php b/src/applications/conduit/protocol/exception/ConduitException.php
--- a/src/applications/conduit/protocol/exception/ConduitException.php
+++ b/src/applications/conduit/protocol/exception/ConduitException.php
@@ -12,7 +12,7 @@
    * will be used instead. This is useful to provide specific information about
    * an exception (e.g., which values were wrong in an invalid request).
    *
-   * @param string Detailed error description.
+   * @param string $error_description Detailed error description.
    * @return this
    */
   final public function setErrorDescription($error_description) {
diff --git a/src/applications/config/custom/PhabricatorCustomLogoConfigType.php b/src/applications/config/custom/PhabricatorCustomLogoConfigType.php
--- a/src/applications/config/custom/PhabricatorCustomLogoConfigType.php
+++ b/src/applications/config/custom/PhabricatorCustomLogoConfigType.php
@@ -15,7 +15,7 @@
 
   /**
    * Return the full URI of the Phorge logo
-   * @param PhabricatorUser Current viewer
+   * @param PhabricatorUser $viewer Current viewer
    * @return string Full URI of the Phorge logo
    */
   public static function getLogoURI(PhabricatorUser $viewer) {
diff --git a/src/applications/config/issue/PhabricatorSetupIssue.php b/src/applications/config/issue/PhabricatorSetupIssue.php
--- a/src/applications/config/issue/PhabricatorSetupIssue.php
+++ b/src/applications/config/issue/PhabricatorSetupIssue.php
@@ -145,8 +145,8 @@
    * we alter `memory_limit` during startup, so if the original value is not
    * provided it will look like it is always set to `-1`.
    *
-   * @param string PHP configuration option to provide a value for.
-   * @param string Explicit value to show in the UI.
+   * @param string $php_config PHP configuration option to provide a value for.
+   * @param string $value Explicit value to show in the UI.
    * @return this
    */
   public function addPHPConfigOriginalValue($php_config, $value) {
diff --git a/src/applications/config/json/PhabricatorConfigJSON.php b/src/applications/config/json/PhabricatorConfigJSON.php
--- a/src/applications/config/json/PhabricatorConfigJSON.php
+++ b/src/applications/config/json/PhabricatorConfigJSON.php
@@ -4,7 +4,8 @@
   /**
    * Properly format a JSON value.
    *
-   * @param wild Any value, but should be a raw value, not a string of JSON.
+   * @param wild $value Any value, but should be a raw value, not a string of
+   *   JSON.
    * @return string
    */
   public static function prettyPrintJSON($value) {
diff --git a/src/applications/config/option/PhabricatorApplicationConfigOptions.php b/src/applications/config/option/PhabricatorApplicationConfigOptions.php
--- a/src/applications/config/option/PhabricatorApplicationConfigOptions.php
+++ b/src/applications/config/option/PhabricatorApplicationConfigOptions.php
@@ -65,8 +65,8 @@
    * or other context. For example, this is used to show workspace IDs when
    * configuring `asana.workspace-id`.
    *
-   * @param   PhabricatorConfigOption   Option being rendered.
-   * @param   AphrontRequest            Active request.
+   * @param   PhabricatorConfigOption   $option Option being rendered.
+   * @param   AphrontRequest            $request Active request.
    * @return  wild                      Additional contextual description
    *                                    information.
    */
diff --git a/src/applications/dashboard/engine/PhabricatorDashboardPanelRenderingEngine.php b/src/applications/dashboard/engine/PhabricatorDashboardPanelRenderingEngine.php
--- a/src/applications/dashboard/engine/PhabricatorDashboardPanelRenderingEngine.php
+++ b/src/applications/dashboard/engine/PhabricatorDashboardPanelRenderingEngine.php
@@ -427,7 +427,7 @@
    * panel. Generally, all of this stuff is ridiculous and we just want to
    * shut it down.
    *
-   * @param PhabricatorDashboardPanel Panel being rendered.
+   * @param PhabricatorDashboardPanel $panel Panel being rendered.
    * @return void
    */
   private function detectRenderingCycle(PhabricatorDashboardPanel $panel) {
diff --git a/src/applications/differential/constants/DifferentialReviewerStatus.php b/src/applications/differential/constants/DifferentialReviewerStatus.php
--- a/src/applications/differential/constants/DifferentialReviewerStatus.php
+++ b/src/applications/differential/constants/DifferentialReviewerStatus.php
@@ -19,7 +19,7 @@
    * will attempt to update you to both "commented" and "accepted". We want
    * "accepted" to win, because it's the stronger of the two.
    *
-   * @param   const Reviewer status constant.
+   * @param   const $constant Reviewer status constant.
    * @return  int   Relative strength (higher is stronger).
    */
   public static function getStatusStrength($constant) {
diff --git a/src/applications/differential/parser/DifferentialChangesetParser.php b/src/applications/differential/parser/DifferentialChangesetParser.php
--- a/src/applications/differential/parser/DifferentialChangesetParser.php
+++ b/src/applications/differential/parser/DifferentialChangesetParser.php
@@ -240,12 +240,12 @@
    * the left and right halves of the displayed diff to be correctly mapped to
    * storage changesets.
    *
-   * @param id    The Differential Changeset ID that comments added to the right
-   *              side of the visible diff should be attached to.
-   * @param bool  If true, attach new comments to the right side of the storage
-   *              changeset. Note that this may be false, if the left side of
-   *              some storage changeset is being shown as the right side of
-   *              a display diff.
+   * @param id    $id The Differential Changeset ID that comments added to the
+   *              right side of the visible diff should be attached to.
+   * @param bool  $is_new If true, attach new comments to the right side of the
+   *              storage changeset. Note that this may be false, if the left
+   *              side of some storage changeset is being shown as the right
+   *              side of a display diff.
    * @return this
    */
   public function setRightSideCommentMapping($id, $is_new) {
@@ -295,7 +295,8 @@
    * By default, there is no render cache key and parsers do not use the cache.
    * This is appropriate for rarely-viewed changesets.
    *
-   * @param   string  Key for identifying this changeset in the render cache.
+   * @param   string $key  Key for identifying this changeset in the render
+   *   cache.
    * @return  this
    */
   public function setRenderCacheKey($key) {
@@ -1238,7 +1239,7 @@
    * taking into consideration which halves of which changesets will actually
    * be shown.
    *
-   * @param PhabricatorInlineComment Comment to test for visibility.
+   * @param PhabricatorInlineComment $comment Comment to test for visibility.
    * @return bool True if the comment is visible on the rendered diff.
    */
   private function isCommentVisibleOnRenderedDiff(
@@ -1266,7 +1267,7 @@
    * Note that the comment must appear somewhere on the rendered changeset, as
    * per isCommentVisibleOnRenderedDiff().
    *
-   * @param PhabricatorInlineComment Comment to test for display
+   * @param PhabricatorInlineComment $comment Comment to test for display
    *              location.
    * @return bool True for right, false for left.
    */
@@ -1298,8 +1299,8 @@
    *   list($start, $end, $mask) = $parsed;
    *   $parser->render($start, $end, $mask);
    *
-   * @param string Range specification, indicating the range of the diff that
-   *               should be rendered.
+   * @param string $spec Range specification, indicating the range of the diff
+   *               that should be rendered.
    * @return tuple List of <start, end, mask> suitable for passing to
    *               @{method:render}.
    */
diff --git a/src/applications/differential/parser/DifferentialLineAdjustmentMap.php b/src/applications/differential/parser/DifferentialLineAdjustmentMap.php
--- a/src/applications/differential/parser/DifferentialLineAdjustmentMap.php
+++ b/src/applications/differential/parser/DifferentialLineAdjustmentMap.php
@@ -58,8 +58,8 @@
   /**
    * Map a line across a change, or a series of changes.
    *
-   * @param int Line to map
-   * @param bool True to map it as the end of a range.
+   * @param int $line Line to map
+   * @param bool $is_end True to map it as the end of a range.
    * @return wild Spooky magic.
    */
   public function mapLine($line, $is_end) {
diff --git a/src/applications/differential/query/DifferentialRevisionQuery.php b/src/applications/differential/query/DifferentialRevisionQuery.php
--- a/src/applications/differential/query/DifferentialRevisionQuery.php
+++ b/src/applications/differential/query/DifferentialRevisionQuery.php
@@ -45,7 +45,7 @@
   /**
    * Find revisions affecting one or more items in a list of paths.
    *
-   * @param list<string> List of file paths.
+   * @param list<string> $paths List of file paths.
    * @return this
    * @task config
    */
@@ -59,7 +59,7 @@
    * this function will clear anything set by previous calls to
    * @{method:withAuthors}.
    *
-   * @param array List of PHIDs of authors
+   * @param array $author_phids List of PHIDs of authors
    * @return this
    * @task config
    */
@@ -72,7 +72,7 @@
    * Filter results to revisions which CC one of the listed people. Calling this
    * function will clear anything set by previous calls to @{method:withCCs}.
    *
-   * @param array List of PHIDs of subscribers.
+   * @param array $cc_phids List of PHIDs of subscribers.
    * @return this
    * @task config
    */
@@ -86,7 +86,7 @@
    * reviewers. Calling this function will clear anything set by previous calls
    * to @{method:withReviewers}.
    *
-   * @param array List of PHIDs of reviewers
+   * @param array $reviewer_phids List of PHIDs of reviewers
    * @return this
    * @task config
    */
@@ -124,7 +124,7 @@
    * Calling this function will clear anything set by previous calls to
    * @{method:withCommitHashes}.
    *
-   * @param array List of pairs <Class
+   * @param array $commit_hashes List of pairs <Class
    *              ArcanistDifferentialRevisionHash::HASH_$type constant,
    *              hash>
    * @return this
@@ -149,7 +149,7 @@
   /**
    * Filter results to revisions on given branches.
    *
-   * @param  list List of branch names.
+   * @param list $branches List of branch names.
    * @return this
    * @task config
    */
@@ -162,7 +162,7 @@
   /**
    * Filter results to only return revisions whose ids are in the given set.
    *
-   * @param array List of revision ids
+   * @param array $ids List of revision ids
    * @return this
    * @task config
    */
@@ -175,7 +175,7 @@
   /**
    * Filter results to only return revisions whose PHIDs are in the given set.
    *
-   * @param array List of revision PHIDs
+   * @param array $phids List of revision PHIDs
    * @return this
    * @task config
    */
@@ -189,7 +189,7 @@
    * Given a set of users, filter results to return only revisions they are
    * responsible for (i.e., they are either authors or reviewers).
    *
-   * @param array List of user PHIDs.
+   * @param array $responsible_phids List of user PHIDs.
    * @return this
    * @task config
    */
@@ -221,7 +221,7 @@
    * Set whether or not the query should load the active diff for each
    * revision.
    *
-   * @param bool True to load and attach diffs.
+   * @param bool $need_active_diffs True to load and attach diffs.
    * @return this
    * @task config
    */
@@ -235,7 +235,7 @@
    * Set whether or not the query should load the associated commit PHIDs for
    * each revision.
    *
-   * @param bool True to load and attach diffs.
+   * @param bool $need_commit_phids True to load and attach diffs.
    * @return this
    * @task config
    */
@@ -249,7 +249,7 @@
    * Set whether or not the query should load associated diff IDs for each
    * revision.
    *
-   * @param bool True to load and attach diff IDs.
+   * @param bool $need_diff_ids True to load and attach diff IDs.
    * @return this
    * @task config
    */
@@ -263,7 +263,7 @@
    * Set whether or not the query should load associated commit hashes for each
    * revision.
    *
-   * @param bool True to load and attach commit hashes.
+   * @param bool $need_hashes True to load and attach commit hashes.
    * @return this
    * @task config
    */
@@ -276,7 +276,7 @@
   /**
    * Set whether or not the query should load associated reviewers.
    *
-   * @param bool True to load and attach reviewers.
+   * @param bool $need_reviewers True to load and attach reviewers.
    * @return this
    * @task config
    */
@@ -291,7 +291,7 @@
    * reviewer. In particular, they have authority to act on behalf of projects
    * they are a member of.
    *
-   * @param bool True to load and attach authority.
+   * @param bool $need_reviewer_authority True to load and attach authority.
    * @return this
    * @task config
    */
diff --git a/src/applications/differential/render/DifferentialChangesetHTMLRenderer.php b/src/applications/differential/render/DifferentialChangesetHTMLRenderer.php
--- a/src/applications/differential/render/DifferentialChangesetHTMLRenderer.php
+++ b/src/applications/differential/render/DifferentialChangesetHTMLRenderer.php
@@ -491,9 +491,10 @@
   /**
    * Build links which users can click to show more context in a changeset.
    *
-   * @param int Beginning of the line range to build links for.
-   * @param int Length of the line range to build links for.
-   * @param int Total number of lines in the changeset.
+   * @param int $top Beginning of the line range to build links for.
+   * @param int $len Length of the line range to build links for.
+   * @param int $changeset_length Total number of lines in the changeset.
+   * @param bool? $is_blocks
    * @return markup Rendered links.
    */
   protected function renderShowContextLinks(
@@ -580,9 +581,9 @@
    *
    * See @{method:renderShowContextLinks}.
    *
-   * @param bool Does this link show all context when clicked?
-   * @param string Range specification for lines to show.
-   * @param string Text of the link.
+   * @param bool $is_all Does this link show all context when clicked?
+   * @param string $range Range specification for lines to show.
+   * @param string $text Text of the link.
    * @return markup Rendered link.
    */
   private function renderShowContextLink($is_all, $range, $text) {
diff --git a/src/applications/differential/render/DifferentialChangesetRenderer.php b/src/applications/differential/render/DifferentialChangesetRenderer.php
--- a/src/applications/differential/render/DifferentialChangesetRenderer.php
+++ b/src/applications/differential/render/DifferentialChangesetRenderer.php
@@ -442,8 +442,8 @@
    *      when a file is not changed.
    *    - `"none"`: Don't show the link (e.g., text not available).
    *
-   * @param   string        Message explaining why the diff is hidden.
-   * @param   string|null   Force mode, see above.
+   * @param   string        $message Message explaining why the diff is hidden.
+   * @param   string|null   $force Force mode, see above.
    * @return  string        Shield markup.
    */
   abstract public function renderShield($message, $force = 'default');
diff --git a/src/applications/differential/storage/DifferentialChangeset.php b/src/applications/differential/storage/DifferentialChangeset.php
--- a/src/applications/differential/storage/DifferentialChangeset.php
+++ b/src/applications/differential/storage/DifferentialChangeset.php
@@ -213,7 +213,7 @@
    * Test if this changeset and some other changeset put the affected file in
    * the same state.
    *
-   * @param DifferentialChangeset Changeset to compare against.
+   * @param DifferentialChangeset $other Changeset to compare against.
    * @return bool True if the two changesets have the same effect.
    */
   public function hasSameEffectAs(DifferentialChangeset $other) {
diff --git a/src/applications/diffusion/data/DiffusionBrowseResultSet.php b/src/applications/diffusion/data/DiffusionBrowseResultSet.php
--- a/src/applications/diffusion/data/DiffusionBrowseResultSet.php
+++ b/src/applications/diffusion/data/DiffusionBrowseResultSet.php
@@ -123,7 +123,7 @@
    * When a directory contains several README files, this function scores them
    * so the caller can select a preferred file. See @{method:getReadmePath}.
    *
-   * @param string Local README path, like "README.txt".
+   * @param string $path Local README path, like "README.txt".
    * @return int Priority score, with higher being more preferred.
    */
   public static function getReadmePriority($path) {
diff --git a/src/applications/diffusion/data/DiffusionGitBranch.php b/src/applications/diffusion/data/DiffusionGitBranch.php
--- a/src/applications/diffusion/data/DiffusionGitBranch.php
+++ b/src/applications/diffusion/data/DiffusionGitBranch.php
@@ -19,8 +19,9 @@
    *     'master' => '99a9c082f9a1b68c7264e26b9e552484a5ae5f25',
    *   );
    *
-   * @param string stdout of git branch command.
-   * @param string Filter branches to those on a specific remote.
+   * @param string $stdout stdout of git branch command.
+   * @param string? $only_this_remote Filter branches to those on a specific
+   *   remote.
    * @return map Map of 'branch' or 'remote/branch' to hash at HEAD.
    */
   public static function parseRemoteBranchOutput(
diff --git a/src/applications/diffusion/protocol/DiffusionMercurialCommandEngine.php b/src/applications/diffusion/protocol/DiffusionMercurialCommandEngine.php
--- a/src/applications/diffusion/protocol/DiffusionMercurialCommandEngine.php
+++ b/src/applications/diffusion/protocol/DiffusionMercurialCommandEngine.php
@@ -58,7 +58,7 @@
    * Sanitize output of an `hg` command invoked with the `--debug` flag to make
    * it usable.
    *
-   * @param string Output from `hg --debug ...`
+   * @param string $stdout Output from `hg --debug ...`
    * @return string Usable output.
    */
   public static function filterMercurialDebugOutput($stdout) {
diff --git a/src/applications/diffusion/query/pathid/DiffusionPathIDQuery.php b/src/applications/diffusion/query/pathid/DiffusionPathIDQuery.php
--- a/src/applications/diffusion/query/pathid/DiffusionPathIDQuery.php
+++ b/src/applications/diffusion/query/pathid/DiffusionPathIDQuery.php
@@ -42,7 +42,7 @@
   /**
    * Convert a path to the canonical, absolute representation used by Diffusion.
    *
-   * @param string Some repository path.
+   * @param string $path Some repository path.
    * @return string Canonicalized Diffusion path.
    * @task pathutil
    */
@@ -62,7 +62,7 @@
    * Return the canonical parent directory for a path. Note, returns "/" when
    * passed "/".
    *
-   * @param string Some repository path.
+   * @param string $path Some repository path.
    * @return string That path's canonical parent directory.
    * @task pathutil
    */
@@ -80,7 +80,7 @@
    * Generate a list of parents for a repository path. The path itself is
    * included.
    *
-   * @param string Some repository path.
+   * @param string $path Some repository path.
    * @return list List of canonical paths between the path and the root.
    * @task pathutil
    */
diff --git a/src/applications/diffusion/request/DiffusionRequest.php b/src/applications/diffusion/request/DiffusionRequest.php
--- a/src/applications/diffusion/request/DiffusionRequest.php
+++ b/src/applications/diffusion/request/DiffusionRequest.php
@@ -56,7 +56,7 @@
    *   - `commit` Optional, commit identifier.
    *   - `line` Optional, line range.
    *
-   * @param   map                 See documentation.
+   * @param   map                 $data See documentation.
    * @return  DiffusionRequest    New request object.
    * @task new
    */
@@ -133,8 +133,9 @@
   /**
    * Internal. Use @{method:newFromDictionary}, not this method.
    *
-   * @param   string              Repository identifier.
-   * @param   PhabricatorUser     Viewing user.
+   * @param   string            $identifier  Repository identifier.
+   * @param   PhabricatorUser   $viewer  Viewing user.
+   * @param   bool?             $need_edit
    * @return  DiffusionRequest    New request object.
    * @task new
    */
@@ -170,7 +171,7 @@
   /**
    * Internal. Use @{method:newFromDictionary}, not this method.
    *
-   * @param   PhabricatorRepository   Repository object.
+   * @param   PhabricatorRepository $repository Repository object.
    * @return  DiffusionRequest        New request object.
    * @task new
    */
@@ -201,7 +202,7 @@
   /**
    * Internal. Use @{method:newFromDictionary}, not this method.
    *
-   * @param map Map of parsed data.
+   * @param map $data Map of parsed data.
    * @return void
    * @task new
    */
@@ -294,7 +295,7 @@
   /**
    * Modify the request to move the symbolic commit elsewhere.
    *
-   * @param string New symbolic commit.
+   * @param string $symbol New symbolic commit.
    * @return this
    */
   public function updateSymbolicCommit($symbol) {
@@ -464,8 +465,8 @@
    *
    * Parse the request URI into components.
    *
-   * @param   string  URI blob.
-   * @param   bool    True if this VCS supports branches.
+   * @param   string  $blob URI blob.
+   * @param   bool    $supports_branches True if this VCS supports branches.
    * @return  map     Parsed URI.
    *
    * @task uri
@@ -535,7 +536,7 @@
   /**
    * Check that the working copy of the repository is present and readable.
    *
-   * @param   string  Path to the working copy.
+   * @param   string $path Path to the working copy.
    */
   protected function validateWorkingCopy($path) {
     if (!is_readable(dirname($path))) {
diff --git a/src/applications/diffusion/view/DiffusionReadmeView.php b/src/applications/diffusion/view/DiffusionReadmeView.php
--- a/src/applications/diffusion/view/DiffusionReadmeView.php
+++ b/src/applications/diffusion/view/DiffusionReadmeView.php
@@ -26,7 +26,7 @@
   /**
    * Get the markup language a README should be interpreted as.
    *
-   * @param string Local README path, like "README.txt".
+   * @param string $path Local README path, like "README.txt".
    * @return string Best markup interpreter (like "remarkup") for this file.
    */
    private function getReadmeLanguage($path) {
diff --git a/src/applications/diviner/query/DivinerAtomQuery.php b/src/applications/diviner/query/DivinerAtomQuery.php
--- a/src/applications/diviner/query/DivinerAtomQuery.php
+++ b/src/applications/diviner/query/DivinerAtomQuery.php
@@ -93,7 +93,7 @@
    * have been generated incorrectly by accident. In these cases, we can
    * restore the original data.
    *
-   * @param bool
+   * @param bool $ghosts
    * @return this
    */
   public function withGhosts($ghosts) {
@@ -437,9 +437,10 @@
    * children. When recursing, also walk up the tree and collect children of
    * atoms they extend.
    *
-   * @param list<DivinerLiveSymbol> List of symbols to collect child hashes of.
-   * @param bool                    True to collect children of extended atoms,
-   *                                as well.
+   * @param list<DivinerLiveSymbol> $symbols List of symbols to collect child
+   *                                hashes of.
+   * @param bool                    $recurse_up True to collect children of
+   *                                extended atoms, as well.
    * @return map<string, string>    Hashes of atoms' children.
    */
   private function getAllChildHashes(array $symbols, $recurse_up) {
@@ -469,9 +470,12 @@
    * Attach child atoms to existing atoms. In recursive mode, also attach child
    * atoms to atoms that these atoms extend.
    *
-   * @param list<DivinerLiveSymbol> List of symbols to attach children to.
-   * @param map<string, DivinerLiveSymbol> Map of symbols, keyed by node hash.
-   * @param bool True to attach children to extended atoms, as well.
+   * @param list<DivinerLiveSymbol> $symbols List of symbols to attach children
+   *   to.
+   * @param map<string, DivinerLiveSymbol> $children Map of symbols, keyed by
+   *   node hash.
+   * @param bool $recurse_up True to attach children to extended atoms, as
+   *   well.
    * @return void
    */
   private function attachAllChildren(
diff --git a/src/applications/doorkeeper/engine/DoorkeeperFeedStoryPublisher.php b/src/applications/doorkeeper/engine/DoorkeeperFeedStoryPublisher.php
--- a/src/applications/doorkeeper/engine/DoorkeeperFeedStoryPublisher.php
+++ b/src/applications/doorkeeper/engine/DoorkeeperFeedStoryPublisher.php
@@ -31,7 +31,8 @@
    * JIRA issues which can have several linked revisions), it's generally
    * more useful not to assume context.
    *
-   * @param bool  True to assume object context when rendering.
+   * @param bool $render_with_implied_context True to assume object context
+   *  when rendering.
    * @return this
    * @task config
    */
diff --git a/src/applications/drydock/blueprint/DrydockBlueprintImplementation.php b/src/applications/drydock/blueprint/DrydockBlueprintImplementation.php
--- a/src/applications/drydock/blueprint/DrydockBlueprintImplementation.php
+++ b/src/applications/drydock/blueprint/DrydockBlueprintImplementation.php
@@ -63,9 +63,10 @@
    * This method should not acquire locks or expect anything to be locked. This
    * is a coarse compatibility check between a lease and a resource.
    *
-   * @param DrydockBlueprint Concrete blueprint to allocate for.
-   * @param DrydockResource Candidate resource to allocate the lease on.
-   * @param DrydockLease Pending lease that wants to allocate here.
+   * @param DrydockBlueprint $blueprint Concrete blueprint to allocate for.
+   * @param DrydockResource $resource Candidate resource to allocate the lease
+   *   on.
+   * @param DrydockLease $lease Pending lease that wants to allocate here.
    * @return bool True if the resource and lease are compatible.
    * @task lease
    */
@@ -81,9 +82,9 @@
    *
    * If acquisition fails, throw an exception.
    *
-   * @param DrydockBlueprint Blueprint which built the resource.
-   * @param DrydockResource Resource to acquire a lease on.
-   * @param DrydockLease Requested lease.
+   * @param DrydockBlueprint $blueprint Blueprint which built the resource.
+   * @param DrydockResource $resource Resource to acquire a lease on.
+   * @param DrydockLease $lease Requested lease.
    * @return void
    * @task lease
    */
@@ -111,9 +112,9 @@
    * This callback is primarily useful for automatically releasing resources
    * once all leases are released.
    *
-   * @param DrydockBlueprint Blueprint which built the resource.
-   * @param DrydockResource Resource a lease was released on.
-   * @param DrydockLease Recently released lease.
+   * @param DrydockBlueprint $blueprint Blueprint which built the resource.
+   * @param DrydockResource $resource Resource a lease was released on.
+   * @param DrydockLease $lease Recently released lease.
    * @return void
    * @task lease
    */
@@ -128,9 +129,9 @@
    *
    * If a lease creates temporary state while held, destroy it here.
    *
-   * @param DrydockBlueprint Blueprint which built the resource.
-   * @param DrydockResource Resource the lease is acquired on.
-   * @param DrydockLease The lease being destroyed.
+   * @param DrydockBlueprint $blueprint Blueprint which built the resource.
+   * @param DrydockResource $resource Resource the lease is acquired on.
+   * @param DrydockLease $lease The lease being destroyed.
    * @return void
    * @task lease
    */
@@ -156,11 +157,11 @@
    * has a flexible pool of expensive resources and you want to pack leases
    * onto them as tightly as possible.
    *
-   * @param DrydockBlueprint The blueprint for an existing resource being
-   *   acquired.
-   * @param DrydockResource The resource being acquired, which we may want to
-   *   build a supplemental resource for.
-   * @param DrydockLease The current lease performing acquisition.
+   * @param DrydockBlueprint $blueprint The blueprint for an existing resource
+   *   being acquired.
+   * @param DrydockResource $resource The resource being acquired, which we may
+   *   want to build a supplemental resource for.
+   * @param DrydockLease $lease The current lease performing acquisition.
    * @return bool True to prefer allocating a supplemental resource.
    *
    * @task lease
@@ -190,7 +191,7 @@
    * really exists, only if some blueprint may conceivably exist which could
    * plausibly be able to build a suitable resource.
    *
-   * @param DrydockLease Requested lease.
+   * @param DrydockLease $lease Requested lease.
    * @return bool True if some concrete blueprint of this implementation's
    *   type might ever be able to build a resource for the lease.
    * @task resource
@@ -211,9 +212,9 @@
    * if the blueprint as configured may, at some time, be able to build a
    * suitable resource.
    *
-   * @param DrydockBlueprint Blueprint which may be asked to allocate a
-   *   resource.
-   * @param DrydockLease Requested lease.
+   * @param DrydockBlueprint $blueprint Blueprint which may be asked to
+   *   allocate a resource.
+   * @param DrydockLease $lease Requested lease.
    * @return bool True if this blueprint can eventually build a suitable
    *   resource for the lease, as currently configured.
    * @task resource
@@ -240,9 +241,9 @@
    * eaten up free capacity by the time it actually tries to build a resource.
    * This is normal and the allocator will recover from it.
    *
-   * @param DrydockBlueprint The blueprint which may be asked to allocate a
-   *   resource.
-   * @param DrydockLease Requested lease.
+   * @param DrydockBlueprint $blueprint The blueprint which may be asked to
+   *   allocate a resource.
+   * @param DrydockLease $lease Requested lease.
    * @return bool True if this blueprint appears likely to be able to allocate
    *   a suitable resource.
    * @task resource
@@ -260,8 +261,9 @@
    * called. Blueprints are entirely responsible for any lock handling they
    * need to perform.
    *
-   * @param DrydockBlueprint The blueprint which should allocate a resource.
-   * @param DrydockLease Requested lease.
+   * @param DrydockBlueprint $blueprint The blueprint which should allocate a
+   *   resource.
+   * @param DrydockLease $lease Requested lease.
    * @return DrydockResource Allocated resource.
    * @task resource
    */
@@ -287,8 +289,8 @@
    * here. For example, you might shut down a virtual host or destroy a working
    * copy on disk.
    *
-   * @param DrydockBlueprint Blueprint which built the resource.
-   * @param DrydockResource Resource being destroyed.
+   * @param DrydockBlueprint $blueprint Blueprint which built the resource.
+   * @param DrydockResource $resource Resource being destroyed.
    * @return void
    * @task resource
    */
@@ -300,8 +302,8 @@
   /**
    * Get a human readable name for a resource.
    *
-   * @param DrydockBlueprint Blueprint which built the resource.
-   * @param DrydockResource Resource to get the name of.
+   * @param DrydockBlueprint $blueprint Blueprint which built the resource.
+   * @param DrydockResource $resource Resource to get the name of.
    * @return string Human-readable resource name.
    * @task resource
    */
@@ -338,7 +340,7 @@
    * build a resource which can satisfy the lease. They may not be able to
    * build that resource right now.
    *
-   * @param DrydockLease Requested lease.
+   * @param DrydockLease $lease Requested lease.
    * @return list<DrydockBlueprintImplementation> List of qualifying blueprint
    *   implementations.
    */
@@ -429,7 +431,7 @@
   /**
    * Get the effective concurrent resource limit for this blueprint.
    *
-   * @param DrydockBlueprint Blueprint to get the limit for.
+   * @param DrydockBlueprint $blueprint Blueprint to get the limit for.
    * @return int|null Limit, or `null` for no limit.
    */
   protected function getConcurrentResourceLimit(DrydockBlueprint $blueprint) {
@@ -500,7 +502,7 @@
   /**
    * Apply standard limits on resource allocation rate.
    *
-   * @param DrydockBlueprint The blueprint requesting an allocation.
+   * @param DrydockBlueprint $blueprint The blueprint requesting an allocation.
    * @return bool True if further allocations should be limited.
    */
   protected function shouldLimitAllocatingPoolSize(
diff --git a/src/applications/drydock/storage/DrydockAuthorization.php b/src/applications/drydock/storage/DrydockAuthorization.php
--- a/src/applications/drydock/storage/DrydockAuthorization.php
+++ b/src/applications/drydock/storage/DrydockAuthorization.php
@@ -103,10 +103,10 @@
    * Apply external authorization effects after a user changes the value of a
    * blueprint selector control an object.
    *
-   * @param PhabricatorUser User applying the change.
-   * @param phid Object PHID change is being applied to.
-   * @param list<phid> Old blueprint PHIDs.
-   * @param list<phid> New blueprint PHIDs.
+   * @param PhabricatorUser $viewer User applying the change.
+   * @param phid $object_phid Object PHID change is being applied to.
+   * @param list<phid> $old Old blueprint PHIDs.
+   * @param list<phid> $new New blueprint PHIDs.
    * @return void
    */
   public static function applyAuthorizationChanges(
diff --git a/src/applications/drydock/storage/DrydockSlotLock.php b/src/applications/drydock/storage/DrydockSlotLock.php
--- a/src/applications/drydock/storage/DrydockSlotLock.php
+++ b/src/applications/drydock/storage/DrydockSlotLock.php
@@ -43,7 +43,7 @@
   /**
    * Load all locks held by a particular owner.
    *
-   * @param phid Owner PHID.
+   * @param phid $owner_phid Owner PHID.
    * @return list<DrydockSlotLock> All held locks.
    * @task info
    */
@@ -57,7 +57,7 @@
   /**
    * Test if a lock is currently free.
    *
-   * @param string Lock key to test.
+   * @param string $lock Lock key to test.
    * @return bool True if the lock is currently free.
    * @task info
    */
@@ -69,7 +69,7 @@
   /**
    * Test if a list of locks are all currently free.
    *
-   * @param list<string> List of lock keys to test.
+   * @param list<string> $locks List of lock keys to test.
    * @return bool True if all locks are currently free.
    * @task info
    */
@@ -82,7 +82,7 @@
   /**
    * Load named locks.
    *
-   * @param list<string> List of lock keys to load.
+   * @param list<string> $locks List of lock keys to load.
    * @return list<DrydockSlotLock> List of held locks.
    * @task info
    */
@@ -114,8 +114,8 @@
    * This method either acquires all the locks or throws an exception (usually
    * because one or more locks are held).
    *
-   * @param phid Lock owner PHID.
-   * @param list<string> List of locks to acquire.
+   * @param phid $owner_phid Lock owner PHID.
+   * @param list<string> $locks List of locks to acquire.
    * @return void
    * @task locks
    */
@@ -158,7 +158,7 @@
   /**
    * Release all locks held by an owner.
    *
-   * @param phid Lock owner PHID.
+   * @param phid $owner_phid Lock owner PHID.
    * @return void
    * @task locks
    */
diff --git a/src/applications/drydock/worker/DrydockLeaseUpdateWorker.php b/src/applications/drydock/worker/DrydockLeaseUpdateWorker.php
--- a/src/applications/drydock/worker/DrydockLeaseUpdateWorker.php
+++ b/src/applications/drydock/worker/DrydockLeaseUpdateWorker.php
@@ -168,7 +168,7 @@
    * Find or build a resource which can satisfy a given lease request, then
    * acquire the lease.
    *
-   * @param DrydockLease Requested lease.
+   * @param DrydockLease $lease Requested lease.
    * @return void
    * @task allocator
    */
@@ -573,7 +573,7 @@
    * Get all the concrete @{class:DrydockBlueprint}s which can possibly
    * build a resource to satisfy a lease.
    *
-   * @param DrydockLease Requested lease.
+   * @param DrydockLease $lease Requested lease.
    * @return list<DrydockBlueprint> List of qualifying blueprints.
    * @task allocator
    */
@@ -645,9 +645,9 @@
    * Load a list of all resources which a given lease can possibly be
    * allocated against.
    *
-   * @param list<DrydockBlueprint> Blueprints which may produce suitable
-   *   resources.
-   * @param DrydockLease Requested lease.
+   * @param list<DrydockBlueprint> $blueprints Blueprints which may produce
+   *   suitable resources.
+   * @param DrydockLease $lease Requested lease.
    * @return list<DrydockResource> Resources which may be able to allocate
    *   the lease.
    * @task allocator
@@ -675,8 +675,8 @@
   /**
    * Remove resources which can not be acquired by a given lease from a list.
    *
-   * @param list<DrydockResource> Candidate resources.
-   * @param DrydockLease Acquiring lease.
+   * @param list<DrydockResource> $resources Candidate resources.
+   * @param DrydockLease $lease Acquiring lease.
    * @return list<DrydockResource> Resources which the lease may be able to
    *   acquire.
    * @task allocator
@@ -703,9 +703,9 @@
    * Remove blueprints which are too heavily allocated to build a resource for
    * a lease from a list of blueprints.
    *
-   * @param list<DrydockBlueprint> List of blueprints.
-   * @return list<DrydockBlueprint> List with blueprints that can not allocate
-   *   a resource for the lease right now removed.
+   * @param list<DrydockBlueprint> $blueprints List of blueprints.
+   * @return list<DrydockBlueprint> $lease List with blueprints that can not
+   *   allocate a resource for the lease right now removed.
    * @task allocator
    */
   private function removeOverallocatedBlueprints(
@@ -731,8 +731,8 @@
    * Rank blueprints by suitability for building a new resource for a
    * particular lease.
    *
-   * @param list<DrydockBlueprint> List of blueprints.
-   * @param DrydockLease Requested lease.
+   * @param list<DrydockBlueprint> $blueprints List of blueprints.
+   * @param DrydockLease $lease Requested lease.
    * @return list<DrydockBlueprint> Ranked list of blueprints.
    * @task allocator
    */
@@ -750,8 +750,8 @@
   /**
    * Rank resources by suitability for allocating a particular lease.
    *
-   * @param list<DrydockResource> List of resources.
-   * @param DrydockLease Requested lease.
+   * @param list<DrydockResource> $resources List of resources.
+   * @param DrydockLease $lease Requested lease.
    * @return list<DrydockResource> Ranked list of resources.
    * @task allocator
    */
@@ -769,8 +769,9 @@
   /**
    * Perform an actual resource allocation with a particular blueprint.
    *
-   * @param DrydockBlueprint The blueprint to allocate a resource from.
-   * @param DrydockLease Requested lease.
+   * @param DrydockBlueprint $blueprint The blueprint to allocate a resource
+   *   from.
+   * @param DrydockLease $lease Requested lease.
    * @return DrydockResource Allocated resource.
    * @task allocator
    */
@@ -815,9 +816,10 @@
    * Check that the resource a blueprint allocated is roughly the sort of
    * object we expect.
    *
-   * @param DrydockBlueprint Blueprint which built the resource.
-   * @param wild Thing which the blueprint claims is a valid resource.
-   * @param DrydockLease Lease the resource was allocated for.
+   * @param DrydockBlueprint $blueprint Blueprint which built the resource.
+   * @param wild $resource Thing which the blueprint claims is a valid
+   *   resource.
+   * @param DrydockLease $lease Lease the resource was allocated for.
    * @return void
    * @task allocator
    */
@@ -899,8 +901,8 @@
   /**
    * Perform an actual lease acquisition on a particular resource.
    *
-   * @param DrydockResource Resource to acquire a lease on.
-   * @param DrydockLease Lease to acquire.
+   * @param DrydockResource $resource Resource to acquire a lease on.
+   * @param DrydockLease $lease Lease to acquire.
    * @return void
    * @task acquire
    */
@@ -931,9 +933,9 @@
   /**
    * Make sure that a lease was really acquired properly.
    *
-   * @param DrydockBlueprint Blueprint which created the resource.
-   * @param DrydockResource Resource which was acquired.
-   * @param DrydockLease The lease which was supposedly acquired.
+   * @param DrydockBlueprint $blueprint Blueprint which created the resource.
+   * @param DrydockResource $resource Resource which was acquired.
+   * @param DrydockLease $lease The lease which was supposedly acquired.
    * @return void
    * @task acquire
    */
diff --git a/src/applications/drydock/worker/DrydockResourceUpdateWorker.php b/src/applications/drydock/worker/DrydockResourceUpdateWorker.php
--- a/src/applications/drydock/worker/DrydockResourceUpdateWorker.php
+++ b/src/applications/drydock/worker/DrydockResourceUpdateWorker.php
@@ -38,7 +38,7 @@
   /**
    * Update a resource, handling exceptions thrown during the update.
    *
-   * @param DrydockReosource Resource to update.
+   * @param DrydockResource $resource Resource to update.
    * @return void
    * @task update
    */
@@ -58,7 +58,7 @@
   /**
    * Update a resource.
    *
-   * @param DrydockResource Resource to update.
+   * @param DrydockResource $resource Resource to update.
    * @return void
    * @task update
    */
@@ -89,8 +89,8 @@
   /**
    * Convert a temporary exception into a yield.
    *
-   * @param DrydockResource Resource to yield.
-   * @param Exception Temporary exception worker encountered.
+   * @param DrydockResource $resource Resource to yield.
+   * @param Exception $ex Temporary exception worker encountered.
    * @task update
    */
   private function yieldResource(DrydockResource $resource, Exception $ex) {
diff --git a/src/applications/feed/PhabricatorFeedStoryPublisher.php b/src/applications/feed/PhabricatorFeedStoryPublisher.php
--- a/src/applications/feed/PhabricatorFeedStoryPublisher.php
+++ b/src/applications/feed/PhabricatorFeedStoryPublisher.php
@@ -214,7 +214,7 @@
   /**
    * Remove PHIDs who should not receive notifications from a subscriber list.
    *
-   * @param list<phid> List of potential subscribers.
+   * @param list<phid> $phids List of potential subscribers.
    * @return list<phid> List of actual subscribers.
    */
   private function filterSubscribedPHIDs(array $phids) {
diff --git a/src/applications/feed/story/PhabricatorFeedStory.php b/src/applications/feed/story/PhabricatorFeedStory.php
--- a/src/applications/feed/story/PhabricatorFeedStory.php
+++ b/src/applications/feed/story/PhabricatorFeedStory.php
@@ -32,8 +32,9 @@
    * construct appropriate @{class:PhabricatorFeedStory} wrappers for each
    * data row.
    *
-   * @param list<dict>  List of @{class:PhabricatorFeedStoryData} rows from the
-   *                    database.
+   * @param list<dict>  $rows List of @{class:PhabricatorFeedStoryData} rows
+   *                    from the database.
+   * @param PhabricatorUser $viewer
    * @return list<PhabricatorFeedStory>   List of @{class:PhabricatorFeedStory}
    *                                      objects.
    * @task load
diff --git a/src/applications/files/PhabricatorImageTransformer.php b/src/applications/files/PhabricatorImageTransformer.php
--- a/src/applications/files/PhabricatorImageTransformer.php
+++ b/src/applications/files/PhabricatorImageTransformer.php
@@ -20,8 +20,8 @@
    * Phabricator can not encode images in the given format (based on available
    * extensions), but can save images in another format.
    *
-   * @param   resource  GD image resource.
-   * @param   string?   Optionally, preferred mime type.
+   * @param   resource  $data GD image resource.
+   * @param   string?   $preferred_mime Optionally, preferred mime type.
    * @return  string    Bytes of an image file.
    * @task save
    */
@@ -62,7 +62,7 @@
   /**
    * Save an image in PNG format, returning the file data as a string.
    *
-   * @param resource      GD image resource.
+   * @param resource      $image GD image resource.
    * @return string|null  PNG file as a string, or null on failure.
    * @task save
    */
@@ -90,7 +90,7 @@
   /**
    * Save an image in GIF format, returning the file data as a string.
    *
-   * @param resource      GD image resource.
+   * @param resource      $image GD image resource.
    * @return string|null  GIF file as a string, or null on failure.
    * @task save
    */
@@ -114,7 +114,7 @@
   /**
    * Save an image in JPG format, returning the file data as a string.
    *
-   * @param resource      GD image resource.
+   * @param resource      $image GD image resource.
    * @return string|null  JPG file as a string, or null on failure.
    * @task save
    */
diff --git a/src/applications/files/engine/PhabricatorChunkedFileStorageEngine.php b/src/applications/files/engine/PhabricatorChunkedFileStorageEngine.php
--- a/src/applications/files/engine/PhabricatorChunkedFileStorageEngine.php
+++ b/src/applications/files/engine/PhabricatorChunkedFileStorageEngine.php
@@ -87,8 +87,8 @@
    * Ideally, we'd like to be able to verify hashes, but this is complicated
    * and time consuming and gives us a fairly small benefit.
    *
-   * @param PhabricatorUser Viewing user.
-   * @param string Claimed file hash.
+   * @param PhabricatorUser $viewer Viewing user.
+   * @param string $hash Claimed file hash.
    * @return string Rehashed file hash.
    */
   public static function getChunkedHash(PhabricatorUser $viewer, $hash) {
diff --git a/src/applications/files/engine/PhabricatorFileStorageEngine.php b/src/applications/files/engine/PhabricatorFileStorageEngine.php
--- a/src/applications/files/engine/PhabricatorFileStorageEngine.php
+++ b/src/applications/files/engine/PhabricatorFileStorageEngine.php
@@ -160,8 +160,8 @@
    * throw an exception. If there are other satisfactory but less-preferred
    * storage engines available, they will be tried.
    *
-   * @param  string The file data to write.
-   * @param  array  File metadata (name, author), if available.
+   * @param  string $data The file data to write.
+   * @param  array  $params File metadata (name, author), if available.
    * @return string Unique string which identifies the stored file, max length
    *                255.
    * @task file
@@ -172,8 +172,8 @@
   /**
    * Read the contents of a file previously written by @{method:writeFile}.
    *
-   * @param   string  The handle returned from @{method:writeFile} when the
-   *                  file was written.
+   * @param   string  $handle The handle returned from @{method:writeFile}
+   *                  when the file was written.
    * @return  string  File contents.
    * @task file
    */
@@ -183,8 +183,8 @@
   /**
    * Delete the data for a file previously written by @{method:writeFile}.
    *
-   * @param   string  The handle returned from @{method:writeFile} when the
-   *                  file was written.
+   * @param   string  $handle The handle returned from @{method:writeFile}
+   *                  when the file was written.
    * @return  void
    * @task file
    */
@@ -200,7 +200,7 @@
    * select the MySQL and Local Disk storage engines if they are configured
    * to allow a given file.
    *
-   * @param int File size in bytes.
+   * @param int $length File size in bytes.
    * @task load
    */
   public static function loadStorageEngines($length) {
diff --git a/src/applications/files/engine/PhabricatorLocalDiskFileStorageEngine.php b/src/applications/files/engine/PhabricatorLocalDiskFileStorageEngine.php
--- a/src/applications/files/engine/PhabricatorLocalDiskFileStorageEngine.php
+++ b/src/applications/files/engine/PhabricatorLocalDiskFileStorageEngine.php
@@ -116,7 +116,7 @@
   /**
    * Convert a handle into an absolute local disk path.
    *
-   * @param string File data handle.
+   * @param string $handle File data handle.
    * @return string Absolute path to the corresponding file.
    * @task internal
    */
diff --git a/src/applications/files/engine/PhabricatorMySQLFileStorageEngine.php b/src/applications/files/engine/PhabricatorMySQLFileStorageEngine.php
--- a/src/applications/files/engine/PhabricatorMySQLFileStorageEngine.php
+++ b/src/applications/files/engine/PhabricatorMySQLFileStorageEngine.php
@@ -80,7 +80,7 @@
   /**
    * Load the Lisk object that stores the file data for a handle.
    *
-   * @param string  File data handle.
+   * @param string $handle File data handle.
    * @return PhabricatorFileStorageBlob Data DAO.
    * @task internal
    */
diff --git a/src/applications/files/query/PhabricatorFileQuery.php b/src/applications/files/query/PhabricatorFileQuery.php
--- a/src/applications/files/query/PhabricatorFileQuery.php
+++ b/src/applications/files/query/PhabricatorFileQuery.php
@@ -96,7 +96,8 @@
    * `PHID-FILE-aaaa` and all transformations of the file with PHID
    * `PHID-FILE-bbbb`.
    *
-   * @param list<dict>  List of transform specifications, described above.
+   * @param list<dict> $specs List of transform specifications, described
+   *                   above.
    * @return this
    */
   public function withTransforms(array $specs) {
diff --git a/src/applications/files/storage/PhabricatorFile.php b/src/applications/files/storage/PhabricatorFile.php
--- a/src/applications/files/storage/PhabricatorFile.php
+++ b/src/applications/files/storage/PhabricatorFile.php
@@ -807,8 +807,8 @@
   /**
    * Return an iterable which emits file content bytes.
    *
-   * @param int Offset for the start of data.
-   * @param int Offset for the end of data.
+   * @param int? $begin Offset for the start of data.
+   * @param int? $end Offset for the end of data.
    * @return Iterable Iterable object which emits requested data.
    */
   public function getFileDataIterator($begin = null, $end = null) {
@@ -1214,8 +1214,9 @@
    * Builtins are located in `resources/builtin/` and identified by their
    * name.
    *
-   * @param  PhabricatorUser Viewing user.
-   * @param  list<PhabricatorFilesBuiltinFile> List of builtin file specs.
+   * @param  PhabricatorUser $user Viewing user.
+   * @param  list<PhabricatorFilesBuiltinFile> $builtins List of builtin file
+   *   specs.
    * @return dict<string, PhabricatorFile> Dictionary of named builtins.
    */
   public static function loadBuiltins(PhabricatorUser $user, array $builtins) {
@@ -1281,8 +1282,8 @@
   /**
    * Convenience wrapper for @{method:loadBuiltins}.
    *
-   * @param PhabricatorUser   Viewing user.
-   * @param string            Single builtin name to load.
+   * @param PhabricatorUser   $user Viewing user.
+   * @param string            $name Single builtin name to load.
    * @return PhabricatorFile  Corresponding builtin file.
    */
   public static function loadBuiltin(PhabricatorUser $user, $name) {
@@ -1473,7 +1474,7 @@
    * Write the policy edge between this file and some object.
    * This method is successful even if the file is already attached.
    *
-   * @param phid Object PHID to attach to.
+   * @param phid $phid Object PHID to attach to.
    * @return this
    */
   public function attachToObject($phid) {
@@ -1487,8 +1488,8 @@
    * NOTE: Please avoid to use this static method directly.
    *       Instead, use PhabricatorFile#attachToObject(phid).
    *
-   * @param phid File PHID to attach from.
-   * @param phid Object PHID to attach to.
+   * @param phid $file_phid File PHID to attach from.
+   * @param phid $object_phid Object PHID to attach to.
    * @return void
    */
   public static function attachFileToObject($file_phid, $object_phid) {
@@ -1526,8 +1527,8 @@
    * This method is called both when creating a file from fresh data, and
    * when creating a new file which reuses existing storage.
    *
-   * @param map<string, wild>   Bag of parameters, see @{class:PhabricatorFile}
-   *  for documentation.
+   * @param map<string, wild> $params Bag of parameters, see
+   *   @{class:PhabricatorFile} for documentation.
    * @return this
    */
   private function readPropertiesFromParameters(array $params) {
diff --git a/src/applications/files/transform/PhabricatorFileImageTransform.php b/src/applications/files/transform/PhabricatorFileImageTransform.php
--- a/src/applications/files/transform/PhabricatorFileImageTransform.php
+++ b/src/applications/files/transform/PhabricatorFileImageTransform.php
@@ -11,7 +11,7 @@
   /**
    * Get an estimate of the transformed dimensions of a file.
    *
-   * @param PhabricatorFile File to transform.
+   * @param PhabricatorFile $file File to transform.
    * @return list<int, int>|null Width and height, if available.
    */
   public function getTransformedDimensions(PhabricatorFile $file) {
@@ -132,7 +132,7 @@
   /**
    * Create a new @{class:PhabricatorFile} from raw data.
    *
-   * @param string Raw file data.
+   * @param string $data Raw file data.
    */
   protected function newFileFromData($data) {
     if ($this->file) {
@@ -159,8 +159,8 @@
   /**
    * Create a new image filled with transparent pixels.
    *
-   * @param int Desired image width.
-   * @param int Desired image height.
+   * @param int $w Desired image width.
+   * @param int $h Desired image height.
    * @return resource New image resource.
    */
   protected function newEmptyImage($w, $h) {
diff --git a/src/applications/harbormaster/constants/HarbormasterBuildStatus.php b/src/applications/harbormaster/constants/HarbormasterBuildStatus.php
--- a/src/applications/harbormaster/constants/HarbormasterBuildStatus.php
+++ b/src/applications/harbormaster/constants/HarbormasterBuildStatus.php
@@ -96,7 +96,7 @@
   /**
    * Get a human readable name for a build status constant.
    *
-   * @param  const  Build status constant.
+   * @param  const $status Build status constant.
    * @return string Human-readable name.
    */
   public static function getBuildStatusName($status) {
diff --git a/src/applications/harbormaster/engine/HarbormasterBuildEngine.php b/src/applications/harbormaster/engine/HarbormasterBuildEngine.php
--- a/src/applications/harbormaster/engine/HarbormasterBuildEngine.php
+++ b/src/applications/harbormaster/engine/HarbormasterBuildEngine.php
@@ -322,8 +322,9 @@
    * particularly relevant when a build uses multiple hosts since it returns
    * hosts to the pool more quickly.
    *
-   * @param list<HarbormasterBuildTarget> Targets in the build.
-   * @param list<HarbormasterBuildStep> List of running and waiting steps.
+   * @param list<HarbormasterBuildTarget> $targets Targets in the build.
+   * @param list<HarbormasterBuildStep>   $steps List of running and waiting
+   *                                      steps.
    * @return void
    */
   private function releaseUnusedArtifacts(array $targets, array $steps) {
@@ -372,7 +373,7 @@
    * Process messages which were sent to these targets, kicking applicable
    * targets out of "Waiting" and into either "Passed" or "Failed".
    *
-   * @param list<HarbormasterBuildTarget> List of targets to process.
+   * @param list<HarbormasterBuildTarget> $targets List of targets to process.
    * @return void
    */
   private function updateWaitingTargets(array $targets) {
@@ -436,7 +437,7 @@
    * the overall state of the associated buildable. Compute the new aggregate
    * state and save it on the buildable.
    *
-   * @param   HarbormasterBuild The buildable to update.
+   * @param   HarbormasterBuild $buildable The buildable to update.
    * @return  void
    */
    public function updateBuildable(HarbormasterBuildable $buildable) {
diff --git a/src/applications/harbormaster/engine/HarbormasterTargetEngine.php b/src/applications/harbormaster/engine/HarbormasterTargetEngine.php
--- a/src/applications/harbormaster/engine/HarbormasterTargetEngine.php
+++ b/src/applications/harbormaster/engine/HarbormasterTargetEngine.php
@@ -56,7 +56,7 @@
    *
    * This method creates the steps if they do not yet exist.
    *
-   * @param list<string> Autotarget keys, like `"core.arc.lint"`.
+   * @param list<string> $autotargets Autotarget keys, like `"core.arc.lint"`.
    * @return map<string, object> Map of keys to step objects.
    */
   private function generateBuildStepMap(array $autotargets) {
@@ -127,7 +127,7 @@
    * Get all of the @{class:HarbormasterBuildStepImplementation} objects for
    * a list of autotarget keys.
    *
-   * @param list<string> Autotarget keys, like `"core.arc.lint"`.
+   * @param list<string> $autotargets Autotarget keys, like `"core.arc.lint"`.
    * @return map<string, object> Map of keys to implementations.
    */
   private function getAutosteps(array $autotargets) {
@@ -154,8 +154,8 @@
    *
    * If some targets or builds do not exist, they are created.
    *
-   * @param HarbormasterBuildable A buildable.
-   * @param map<string, object> Map of keys to steps.
+   * @param HarbormasterBuildable $buildable A buildable.
+   * @param map<string, object> $step_map Map of keys to steps.
    * @return map<string, object> Map of keys to targets.
    */
   private function generateBuildTargetMap(
diff --git a/src/applications/harbormaster/step/HarbormasterBuildStepImplementation.php b/src/applications/harbormaster/step/HarbormasterBuildStepImplementation.php
--- a/src/applications/harbormaster/step/HarbormasterBuildStepImplementation.php
+++ b/src/applications/harbormaster/step/HarbormasterBuildStepImplementation.php
@@ -187,9 +187,11 @@
    *
    *   ls 'dir with spaces'
    *
-   * @param string Name of a `vxsprintf` function, like @{function:vcsprintf}.
-   * @param string User-provided pattern string containing `${variables}`.
-   * @param dict   List of available replacement variables.
+   * @param string $function Name of a `vxsprintf` function, like
+   *               @{function:vcsprintf}.
+   * @param string $pattern User-provided pattern string containing
+   *               `${variables}`.
+   * @param dict   $variables List of available replacement variables.
    * @return string String with variables replaced safely into it.
    */
   protected function mergeVariables($function, $pattern, array $variables) {
diff --git a/src/applications/harbormaster/storage/HarbormasterBuildable.php b/src/applications/harbormaster/storage/HarbormasterBuildable.php
--- a/src/applications/harbormaster/storage/HarbormasterBuildable.php
+++ b/src/applications/harbormaster/storage/HarbormasterBuildable.php
@@ -60,9 +60,9 @@
   /**
    * Start builds for a given buildable.
    *
-   * @param phid PHID of the object to build.
-   * @param phid Container PHID for the buildable.
-   * @param list<HarbormasterBuildRequest> List of builds to perform.
+   * @param phid $phid PHID of the object to build.
+   * @param phid $container_phid Container PHID for the buildable.
+   * @param list<HarbormasterBuildRequest> $requests List of builds to perform.
    * @return void
    */
   public static function applyBuildPlans(
diff --git a/src/applications/herald/adapter/HeraldAdapter.php b/src/applications/herald/adapter/HeraldAdapter.php
--- a/src/applications/herald/adapter/HeraldAdapter.php
+++ b/src/applications/herald/adapter/HeraldAdapter.php
@@ -171,7 +171,8 @@
    * These transactions are set by @{class:PhabricatorApplicationEditor}
    * automatically, before it invokes Herald.
    *
-   * @param list<PhabricatorApplicationTransaction> List of transactions.
+   * @param list<PhabricatorApplicationTransaction> $xactions List of
+   *   transactions.
    * @return this
    */
   final public function setAppliedTransactions(array $xactions) {
diff --git a/src/applications/maniphest/constants/ManiphestTaskPriority.php b/src/applications/maniphest/constants/ManiphestTaskPriority.php
--- a/src/applications/maniphest/constants/ManiphestTaskPriority.php
+++ b/src/applications/maniphest/constants/ManiphestTaskPriority.php
@@ -137,7 +137,7 @@
   /**
    * Retrieve the full name of the priority level provided.
    *
-   * @param   int     A priority level.
+   * @param   int     $priority A priority level.
    * @return  string  The priority name if the level is a valid one.
    */
   public static function getTaskPriorityName($priority) {
@@ -147,7 +147,7 @@
   /**
    * Retrieve the color of the priority level given
    *
-   * @param   int     A priority level.
+   * @param   int     $priority A priority level.
    * @return  string  The color of the priority if the level is valid,
    *                  or black if it is not.
    */
diff --git a/src/applications/meta/panel/PhabricatorApplicationConfigurationPanel.php b/src/applications/meta/panel/PhabricatorApplicationConfigurationPanel.php
--- a/src/applications/meta/panel/PhabricatorApplicationConfigurationPanel.php
+++ b/src/applications/meta/panel/PhabricatorApplicationConfigurationPanel.php
@@ -27,7 +27,7 @@
   /**
    * Get the URI for this application configuration panel.
    *
-   * @param string? Optional path to append.
+   * @param string? $path Optional path to append.
    * @return string Relative URI for the panel.
    */
   public function getPanelURI($path = '') {
diff --git a/src/applications/metamta/parser/PhabricatorMetaMTAEmailBodyParser.php b/src/applications/metamta/parser/PhabricatorMetaMTAEmailBodyParser.php
--- a/src/applications/metamta/parser/PhabricatorMetaMTAEmailBodyParser.php
+++ b/src/applications/metamta/parser/PhabricatorMetaMTAEmailBodyParser.php
@@ -26,7 +26,7 @@
    *     ),
    *   )
    *
-   * @param   string  Raw mail text body.
+   * @param   string  $body Raw mail text body.
    * @return  dict    Parsed body.
    */
   public function parseBody($body) {
diff --git a/src/applications/metamta/receiver/PhabricatorObjectMailReceiver.php b/src/applications/metamta/receiver/PhabricatorObjectMailReceiver.php
--- a/src/applications/metamta/receiver/PhabricatorObjectMailReceiver.php
+++ b/src/applications/metamta/receiver/PhabricatorObjectMailReceiver.php
@@ -19,9 +19,9 @@
    * Load the object receiving mail, based on an identifying pattern. Normally
    * this pattern is some sort of object ID.
    *
-   * @param   string          A string matched by @{method:getObjectPattern}
-   *                          fragment.
-   * @param   PhabricatorUser The viewing user.
+   * @param   string          $pattern A string matched by
+   *                          @{method:getObjectPattern} fragment.
+   * @param   PhabricatorUser $viewer The viewing user.
    * @return  object|null     The object to receive mail, or null if no such
    *                          object exists.
    */
diff --git a/src/applications/metamta/replyhandler/PhabricatorMailReplyHandler.php b/src/applications/metamta/replyhandler/PhabricatorMailReplyHandler.php
--- a/src/applications/metamta/replyhandler/PhabricatorMailReplyHandler.php
+++ b/src/applications/metamta/replyhandler/PhabricatorMailReplyHandler.php
@@ -199,8 +199,8 @@
    * Each target should be sent a separate email, and contains the information
    * required to generate it with appropriate permissions and configuration.
    *
-   * @param list<phid> List of "To" PHIDs.
-   * @param list<phid> List of "CC" PHIDs.
+   * @param list<phid> $raw_to List of "To" PHIDs.
+   * @param list<phid> $raw_cc List of "CC" PHIDs.
    * @return list<PhabricatorMailTarget> List of targets.
    */
   final public function getMailTargets(array $raw_to, array $raw_cc) {
@@ -274,8 +274,8 @@
    * This takes any compound recipients (like projects) and looks up all their
    * members.
    *
-   * @param list<phid> List of To PHIDs.
-   * @param list<phid> List of CC PHIDs.
+   * @param list<phid> $to List of To PHIDs.
+   * @param list<phid> $cc List of CC PHIDs.
    * @return pair<list<phid>, list<phid>> Expanded PHID lists.
    */
   private function expandRecipientPHIDs(array $to, array $cc) {
@@ -332,8 +332,8 @@
    *
    * Invalid recipients are dropped from the results.
    *
-   * @param list<phid> List of To PHIDs.
-   * @param list<phid> List of CC PHIDs.
+   * @param list<phid> $to List of To PHIDs.
+   * @param list<phid> $cc List of CC PHIDs.
    * @return pair<wild, wild> Maps from PHIDs to users.
    */
   private function loadRecipientUsers(array $to, array $cc) {
@@ -370,8 +370,8 @@
   /**
    * Remove recipients who do not have permission to view the mail receiver.
    *
-   * @param map<string, PhabricatorUser> Map of "To" users.
-   * @param map<string, PhabricatorUser> Map of "CC" users.
+   * @param map<string, PhabricatorUser> $to Map of "To" users.
+   * @param map<string, PhabricatorUser> $cc Map of "CC" users.
    * @return pair<wild, wild> Filtered user maps.
    */
   private function filterRecipientUsers(array $to, array $cc) {
diff --git a/src/applications/metamta/storage/PhabricatorMetaMTAMail.php b/src/applications/metamta/storage/PhabricatorMetaMTAMail.php
--- a/src/applications/metamta/storage/PhabricatorMetaMTAMail.php
+++ b/src/applications/metamta/storage/PhabricatorMetaMTAMail.php
@@ -88,7 +88,7 @@
    * These tags are used to allow users to opt out of receiving certain types
    * of mail, like updates when a task's projects change.
    *
-   * @param list<const>
+   * @param list<const> $tags
    * @return this
    */
   public function setMailTags(array $tags) {
@@ -109,7 +109,7 @@
    * needs to be set whenever an action is triggered by an email message. See
    * T251 for more details.
    *
-   * @param   string The "Message-ID" of the email which precedes this one.
+   * @param   string $id The "Message-ID" of the email which precedes this one.
    * @return  this
    */
   public function setParentMessageID($id) {
@@ -419,7 +419,7 @@
    * This is primarily intended to let users who don't want any email still
    * receive things like password resets.
    *
-   * @param bool  True to force delivery despite user preferences.
+   * @param bool $force True to force delivery despite user preferences.
    * @return this
    */
   public function setForceDelivery($force) {
@@ -437,7 +437,7 @@
    * "Precedence: bulk" or similar, but is implementation and configuration
    * dependent.
    *
-   * @param bool  True if the mail is automated bulk mail.
+   * @param bool $is_bulk True if the mail is automated bulk mail.
    * @return this
    */
   public function setIsBulk($is_bulk) {
@@ -454,9 +454,10 @@
    * set appropriate headers (Message-ID, In-Reply-To, References and
    * Thread-Index) based on the capabilities of the underlying mailer.
    *
-   * @param string  Unique identifier, appropriate for use in a Message-ID,
-   *                In-Reply-To or References headers.
-   * @param bool    If true, indicates this is the first message in the thread.
+   * @param string  $thread_id Unique identifier, appropriate for use in a
+   *                Message-ID, In-Reply-To or References headers.
+   * @param bool?   $is_first_message If true, indicates this is the first
+   *                message in the thread.
    * @return this
    */
   public function setThreadID($thread_id, $is_first_message = false) {
@@ -858,8 +859,8 @@
    * For example, this will expand project PHIDs into a list of the project's
    * members.
    *
-   * @param list<phid>  List of recipient PHIDs, possibly including aggregate
-   *                    recipients.
+   * @param list<phid>  $phids List of recipient PHIDs, possibly including
+   *                    aggregate recipients.
    * @return list<phid> Deaggregated list of mailable recipients.
    */
   public function expandRecipients(array $phids) {
diff --git a/src/applications/metamta/util/PhabricatorMailUtil.php b/src/applications/metamta/util/PhabricatorMailUtil.php
--- a/src/applications/metamta/util/PhabricatorMailUtil.php
+++ b/src/applications/metamta/util/PhabricatorMailUtil.php
@@ -10,7 +10,7 @@
    * which can make forwarding rules easier to write. This method strips the
    * prefix if it is present, and normalizes casing and whitespace.
    *
-   * @param PhutilEmailAddress Email address.
+   * @param PhutilEmailAddress $address Email address.
    * @return PhutilEmailAddress Normalized address.
    */
   public static function normalizeAddress(PhutilEmailAddress $address) {
@@ -47,8 +47,8 @@
    *   <ALincoln@example.com>
    *   "Abraham" <phabricator+ALINCOLN@EXAMPLE.COM> # With configured prefix.
    *
-   * @param   PhutilEmailAddress Email address.
-   * @param   PhutilEmailAddress Another email address.
+   * @param   PhutilEmailAddress $u Email address.
+   * @param   PhutilEmailAddress $v Another email address.
    * @return  bool True if addresses are effectively the same address.
    */
   public static function matchAddresses(
diff --git a/src/applications/metamta/view/PhabricatorMetaMTAMailBody.php b/src/applications/metamta/view/PhabricatorMetaMTAMailBody.php
--- a/src/applications/metamta/view/PhabricatorMetaMTAMailBody.php
+++ b/src/applications/metamta/view/PhabricatorMetaMTAMailBody.php
@@ -40,7 +40,7 @@
   /**
    * Add a raw block of text to the email. This will be rendered as-is.
    *
-   * @param string Block of text.
+   * @param string $text Block of text.
    * @return this
    * @task compose
    */
@@ -100,8 +100,8 @@
    *    HEADER
    *      Text is indented.
    *
-   * @param string Header text.
-   * @param string Section text.
+   * @param string $header Header text.
+   * @param string $section Section text.
    * @return this
    * @task compose
    */
@@ -155,7 +155,7 @@
   /**
    * Add an attachment.
    *
-   * @param PhabricatorMailAttachment Attachment.
+   * @param PhabricatorMailAttachment $attachment Attachment.
    * @return this
    * @task compose
    */
@@ -198,7 +198,7 @@
   /**
    * Indent a block of text for rendering under a section heading.
    *
-   * @param string Text to indent.
+   * @param string $text Text to indent.
    * @return string Indented text.
    * @task render
    */
diff --git a/src/applications/notification/query/PhabricatorNotificationQuery.php b/src/applications/notification/query/PhabricatorNotificationQuery.php
--- a/src/applications/notification/query/PhabricatorNotificationQuery.php
+++ b/src/applications/notification/query/PhabricatorNotificationQuery.php
@@ -31,8 +31,8 @@
    * only unread notifications, while `false` means to return only //read//
    * notifications. The default is `null`, which returns both.
    *
-   * @param mixed True or false to filter results by read status. Null to remove
-   *              the filter.
+   * @param mixed $unread True or false to filter results by read status. Null
+   *              to remove the filter.
    * @return this
    * @task config
    */
diff --git a/src/applications/passphrase/view/PassphraseCredentialControl.php b/src/applications/passphrase/view/PassphraseCredentialControl.php
--- a/src/applications/passphrase/view/PassphraseCredentialControl.php
+++ b/src/applications/passphrase/view/PassphraseCredentialControl.php
@@ -157,9 +157,9 @@
    *   - If you do change the credential, the new credential must be one you
    *     can use.
    *
-   * @param PhabricatorUser The acting user.
-   * @param list<PhabricatorApplicationTransaction> List of credential altering
-   *        transactions.
+   * @param PhabricatorUser $actor The acting user.
+   * @param list<PhabricatorApplicationTransaction> $xactions List of
+   *        credential altering transactions.
    * @return bool True if the transactions are valid.
    */
   public static function validateTransactions(
diff --git a/src/applications/people/storage/PhabricatorUser.php b/src/applications/people/storage/PhabricatorUser.php
--- a/src/applications/people/storage/PhabricatorUser.php
+++ b/src/applications/people/storage/PhabricatorUser.php
@@ -429,8 +429,8 @@
   /**
    * Test if a given setting is set to a particular value.
    *
-   * @param const Setting key.
-   * @param wild Value to compare.
+   * @param const $key Setting key.
+   * @param wild $value Value to compare.
    * @return bool True if the setting has the specified value.
    * @task settings
    */
@@ -477,7 +477,7 @@
    *
    * This is primarily useful for unit tests.
    *
-   * @param string New timezone identifier.
+   * @param string $identifier New timezone identifier.
    * @return this
    * @task settings
    */
@@ -770,8 +770,8 @@
   /**
    * Write to the availability cache.
    *
-   * @param wild Availability cache data.
-   * @param int|null Cache TTL.
+   * @param wild $availability Availability cache data.
+   * @param int|null $ttl Cache TTL.
    * @return this
    * @task availability
    */
@@ -916,7 +916,7 @@
    * Get a @{class:PhabricatorHandleList} which benefits from this viewer's
    * internal handle pool.
    *
-   * @param list<phid> List of PHIDs to load.
+   * @param list<phid> $phids List of PHIDs to load.
    * @return PhabricatorHandleList Handle list object.
    * @task handle
    */
@@ -935,7 +935,7 @@
    *
    * This benefits from the viewer's internal handle pool.
    *
-   * @param phid PHID to render a handle for.
+   * @param phid $phid PHID to render a handle for.
    * @return PHUIHandleView View of the handle.
    * @task handle
    */
@@ -949,7 +949,7 @@
    *
    * This benefits from the viewer's internal handle pool.
    *
-   * @param list<phid> List of PHIDs to render.
+   * @param list<phid> $phids List of PHIDs to render.
    * @return PHUIHandleListView View of the handles.
    * @task handle
    */
diff --git a/src/applications/people/storage/PhabricatorUserEmail.php b/src/applications/people/storage/PhabricatorUserEmail.php
--- a/src/applications/people/storage/PhabricatorUserEmail.php
+++ b/src/applications/people/storage/PhabricatorUserEmail.php
@@ -180,7 +180,7 @@
   /**
    * Send a verification email from $user to this address.
    *
-   * @param PhabricatorUser The user sending the verification.
+   * @param PhabricatorUser $user The user sending the verification.
    * @return this
    * @task email
    */
@@ -229,8 +229,8 @@
    * Send a notification email from $user to this address, informing the
    * recipient that this is no longer their account's primary address.
    *
-   * @param PhabricatorUser The user sending the notification.
-   * @param PhabricatorUserEmail New primary email address.
+   * @param PhabricatorUser $user The user sending the notification.
+   * @param PhabricatorUserEmail $new New primary email address.
    * @task email
    */
   public function sendOldPrimaryEmail(
@@ -269,7 +269,7 @@
    * Send a notification email from $user to this address, informing the
    * recipient that this is now their account's new primary email address.
    *
-   * @param PhabricatorUser The user sending the verification.
+   * @param PhabricatorUser $user The user sending the verification.
    * @return this
    * @task email
    */
diff --git a/src/applications/phid/PhabricatorObjectHandle.php b/src/applications/phid/PhabricatorObjectHandle.php
--- a/src/applications/phid/PhabricatorObjectHandle.php
+++ b/src/applications/phid/PhabricatorObjectHandle.php
@@ -275,7 +275,7 @@
    * Set whether or not the underlying object is complete. See
    * @{method:isComplete} for an explanation of what it means to be complete.
    *
-   * @param bool True if the handle represents a complete object.
+   * @param bool $complete True if the handle represents a complete object.
    * @return this
    */
   public function setComplete($complete) {
diff --git a/src/applications/phid/query/PhabricatorObjectQuery.php b/src/applications/phid/query/PhabricatorObjectQuery.php
--- a/src/applications/phid/query/PhabricatorObjectQuery.php
+++ b/src/applications/phid/query/PhabricatorObjectQuery.php
@@ -196,8 +196,8 @@
    * viewer. This method is generally used to validate that PHIDs affected by
    * a transaction are valid.
    *
-   * @param PhabricatorUser Viewer.
-   * @param list<phid> List of ostensibly valid PHIDs.
+   * @param PhabricatorUser $viewer Viewer.
+   * @param list<phid> $phids List of ostensibly valid PHIDs.
    * @return list<phid> List of invalid or restricted PHIDs.
    */
   public static function loadInvalidPHIDsForViewer(
diff --git a/src/applications/phid/type/PhabricatorPHIDType.php b/src/applications/phid/type/PhabricatorPHIDType.php
--- a/src/applications/phid/type/PhabricatorPHIDType.php
+++ b/src/applications/phid/type/PhabricatorPHIDType.php
@@ -52,8 +52,8 @@
    * can provide a dummy implementation for this method and overload
    * @{method:loadObjects} instead.
    *
-   * @param PhabricatorObjectQuery Query being executed.
-   * @param list<phid> PHIDs to load.
+   * @param PhabricatorObjectQuery $query Query being executed.
+   * @param list<phid> $phids PHIDs to load.
    * @return PhabricatorPolicyAwareQuery Query object which loads the
    *   specified PHIDs when executed.
    */
@@ -67,8 +67,8 @@
    * necessary to implement @{method:buildQueryForObjects} to get object
    * loading to work.
    *
-   * @param PhabricatorObjectQuery Query being executed.
-   * @param list<phid> PHIDs to load.
+   * @param PhabricatorObjectQuery $query Query being executed.
+   * @param list<phid> $phids PHIDs to load.
    * @return list<wild> Corresponding objects.
    */
   public function loadObjects(
@@ -113,10 +113,11 @@
    * each handle at a minimum. See @{class:PhabricatorObjectHandle} for other
    * handle properties.
    *
-   * @param PhabricatorHandleQuery          Issuing query object.
-   * @param list<PhabricatorObjectHandle>   Handles to populate with data.
-   * @param list<Object>                    Objects for these PHIDs loaded by
-   *                                        @{method:buildQueryForObjects()}.
+   * @param PhabricatorHandleQuery        $query    Issuing query object.
+   * @param list<PhabricatorObjectHandle> $handles  Handles to populate with
+   *   data.
+   * @param list<Object>                  $objects  Objects for these PHIDs
+   *   loaded by @{method:buildQueryForObjects()}.
    * @return void
    */
   abstract public function loadHandles(
@@ -165,7 +166,7 @@
   /**
    * Get all PHID types of applications installed for a given viewer.
    *
-   * @param PhabricatorUser Viewing user.
+   * @param PhabricatorUser $viewer Viewing user.
    * @return dict<string, PhabricatorPHIDType> Map of constants to installed
    *  types.
    */
@@ -209,7 +210,7 @@
   /**
    * Get all PHID types of an application.
    *
-   * @param string Class name of an application
+   * @param string $application Class name of an application
    * @return dict<string, PhabricatorPHIDType> Map of constants of application
    */
   public static function getAllTypesForApplication(
diff --git a/src/applications/phid/utils.php b/src/applications/phid/utils.php
--- a/src/applications/phid/utils.php
+++ b/src/applications/phid/utils.php
@@ -4,7 +4,7 @@
  * Look up the type of a PHID. Returns
  * PhabricatorPHIDConstants::PHID_TYPE_UNKNOWN if it fails to look up the type
  *
- * @param   phid Anything.
+ * @param   phid   $phid Anything.
  * @return  string A value from PhabricatorPHIDConstants (ideally)
  */
 function phid_get_type($phid) {
@@ -18,7 +18,7 @@
 /**
  * Group a list of phids by type.
  *
- * @param   phids array of phids
+ * @param   $phids Array of phids
  * @return  map of phid type => list of phids
  */
 function phid_group_by_type($phids) {
diff --git a/src/applications/phrequent/storage/PhrequentTimeBlock.php b/src/applications/phrequent/storage/PhrequentTimeBlock.php
--- a/src/applications/phrequent/storage/PhrequentTimeBlock.php
+++ b/src/applications/phrequent/storage/PhrequentTimeBlock.php
@@ -254,7 +254,8 @@
    * This is used to avoid double-counting time on objects which had timers
    * started multiple times.
    *
-   * @param list<pair<int, int>> List of possibly overlapping time ranges.
+   * @param list<pair<int, int>> $ranges List of possibly overlapping time
+   *   ranges.
    * @return list<pair<int, int>> Nonoverlapping time ranges.
    */
   public static function mergeTimeRanges(array $ranges) {
diff --git a/src/applications/policy/filter/PhabricatorPolicyFilter.php b/src/applications/policy/filter/PhabricatorPolicyFilter.php
--- a/src/applications/policy/filter/PhabricatorPolicyFilter.php
+++ b/src/applications/policy/filter/PhabricatorPolicyFilter.php
@@ -52,11 +52,13 @@
    * ...will throw a @{class:PhabricatorPolicyException} if the new policy would
    * remove the user's ability to edit the object.
    *
-   * @param PhabricatorUser   The viewer to perform a policy check for.
-   * @param PhabricatorPolicyInterface The object to perform a policy check on.
-   * @param string            Capability to test.
-   * @param string            Perform the test as though the object has this
-   *                          policy instead of the policy it actually has.
+   * @param PhabricatorUser   $viewer The viewer to perform a policy check for.
+   * @param PhabricatorPolicyInterface $object The object to perform a policy
+   *                          check on.
+   * @param string            $capability Capability to test.
+   * @param string            $forced_policy Perform the test as though the
+   *                          object has this policy instead of the policy it
+   *                          actually has.
    * @return void
    */
   public static function requireCapabilityWithForcedPolicy(
diff --git a/src/applications/policy/interface/PhabricatorExtendedPolicyInterface.php b/src/applications/policy/interface/PhabricatorExtendedPolicyInterface.php
--- a/src/applications/policy/interface/PhabricatorExtendedPolicyInterface.php
+++ b/src/applications/policy/interface/PhabricatorExtendedPolicyInterface.php
@@ -62,8 +62,8 @@
    *     // ...
    *   );
    *
-   * @param const Capability being tested.
-   * @param PhabricatorUser Viewer whose capabilities are being tested.
+   * @param const $capability Capability being tested.
+   * @param PhabricatorUser $viewer Viewer whose capabilities are being tested.
    * @return list<pair<wild, wild>> List of extended policies.
    */
   public function getExtendedPolicy($capability, PhabricatorUser $viewer);
diff --git a/src/applications/policy/rule/PhabricatorPolicyRule.php b/src/applications/policy/rule/PhabricatorPolicyRule.php
--- a/src/applications/policy/rule/PhabricatorPolicyRule.php
+++ b/src/applications/policy/rule/PhabricatorPolicyRule.php
@@ -120,9 +120,9 @@
    * rendering a verdict about whether the user will be able to see the object
    * or not after applying the policy change.
    *
-   * @param PhabricatorPolicyInterface Object to pass a hint about.
-   * @param PhabricatorPolicyRule Rule to pass hint to.
-   * @param wild Hint.
+   * @param PhabricatorPolicyInterface $object Object to pass a hint about.
+   * @param PhabricatorPolicyRule $rule Rule to pass hint to.
+   * @param wild $hint Hint.
    * @return void
    */
   public static function passTransactionHintToRule(
diff --git a/src/applications/policy/storage/PhabricatorPolicy.php b/src/applications/policy/storage/PhabricatorPolicy.php
--- a/src/applications/policy/storage/PhabricatorPolicy.php
+++ b/src/applications/policy/storage/PhabricatorPolicy.php
@@ -348,7 +348,7 @@
    * policy. This is used to bulk load data (like project memberships) in order
    * to apply policy filters efficiently.
    *
-   * @param string Policy rule classname.
+   * @param string $rule_class Policy rule classname.
    * @return list<wild> List of values used in this policy.
    */
   public function getCustomRuleValues($rule_class) {
@@ -402,7 +402,7 @@
    * set of unique users. In this case, neither is strictly stronger than
    * the other.
    *
-   * @param PhabricatorPolicy Other policy.
+   * @param PhabricatorPolicy $other Other policy.
    * @return bool `true` if this policy is more restrictive than the other
    *  policy.
    */
diff --git a/src/applications/repository/daemon/PhabricatorRepositoryPullLocalDaemon.php b/src/applications/repository/daemon/PhabricatorRepositoryPullLocalDaemon.php
--- a/src/applications/repository/daemon/PhabricatorRepositoryPullLocalDaemon.php
+++ b/src/applications/repository/daemon/PhabricatorRepositoryPullLocalDaemon.php
@@ -341,8 +341,8 @@
    * With the `$consume` flag, an internal cursor will also be incremented so
    * that these messages are not returned by subsequent calls.
    *
-   * @param bool Pass `true` to consume these messages, so the process will
-   *   not see them again.
+   * @param bool? $consume Pass `true` to consume these messages, so the
+   *   process will not see them again.
    * @return list<wild> Pending update messages.
    *
    * @task pull
diff --git a/src/applications/repository/engine/PhabricatorRepositoryDiscoveryEngine.php b/src/applications/repository/engine/PhabricatorRepositoryDiscoveryEngine.php
--- a/src/applications/repository/engine/PhabricatorRepositoryDiscoveryEngine.php
+++ b/src/applications/repository/engine/PhabricatorRepositoryDiscoveryEngine.php
@@ -538,7 +538,7 @@
    *
    * @task internal
    *
-   * @param   list<DiffusionRepositoryRef> List of refs.
+   * @param   list<DiffusionRepositoryRef> $refs List of refs.
    * @return  list<DiffusionRepositoryRef> Sorted list of refs.
    */
   private function sortRefs(array $refs) {
diff --git a/src/applications/repository/engine/PhabricatorRepositoryPullEngine.php b/src/applications/repository/engine/PhabricatorRepositoryPullEngine.php
--- a/src/applications/repository/engine/PhabricatorRepositoryPullEngine.php
+++ b/src/applications/repository/engine/PhabricatorRepositoryPullEngine.php
@@ -740,7 +740,7 @@
    * error message. To prevent this, censor response bodies out of error
    * messages.
    *
-   * @param string Uncensored Mercurial command output.
+   * @param string $message Uncensored Mercurial command output.
    * @return string Censored Mercurial command output.
    */
   private function censorMercurialErrorMessage($message) {
diff --git a/src/applications/repository/engine/PhabricatorRepositoryRefEngine.php b/src/applications/repository/engine/PhabricatorRepositoryRefEngine.php
--- a/src/applications/repository/engine/PhabricatorRepositoryRefEngine.php
+++ b/src/applications/repository/engine/PhabricatorRepositoryRefEngine.php
@@ -233,7 +233,7 @@
    * point at commits which no longer exist. This can make commands issued later
    * fail. See T5839 for discussion.
    *
-   * @param list<string>    List of commit identifiers.
+   * @param list<string>    $identifiers List of commit identifiers.
    * @return list<string>   List with nonexistent identifiers removed.
    */
   private function removeMissingCommits(array $identifiers) {
diff --git a/src/applications/repository/graphcache/PhabricatorRepositoryGraphCache.php b/src/applications/repository/graphcache/PhabricatorRepositoryGraphCache.php
--- a/src/applications/repository/graphcache/PhabricatorRepositoryGraphCache.php
+++ b/src/applications/repository/graphcache/PhabricatorRepositoryGraphCache.php
@@ -64,10 +64,10 @@
   /**
    * Search the graph cache for the most modification to a path.
    *
-   * @param int     The commit ID to search ancestors of.
-   * @param int     The path ID to search for changes to.
-   * @param float   Maximum number of seconds to spend trying to satisfy this
-   *                query using the graph cache. By default, `0.5` (500ms).
+   * @param int     $commit_id The commit ID to search ancestors of.
+   * @param int     $path_id The path ID to search for changes to.
+   * @param float   $time Maximum number of seconds to spend trying to satisfy
+   *                this query using the graph cache. By default `0.5` (500ms).
    * @return mixed  Commit ID, or `null` if no ancestors exist, or `false` if
    *                the graph cache was unable to determine the answer.
    * @task query
@@ -189,7 +189,7 @@
   /**
    * Get the bucket key for a given commit ID.
    *
-   * @param   int   Commit ID.
+   * @param   int   $commit_id Commit ID.
    * @return  int   Bucket key.
    * @task cache
    */
@@ -201,7 +201,7 @@
   /**
    * Get the cache key for a given bucket key (from @{method:getBucketKey}).
    *
-   * @param   int     Bucket key.
+   * @param   int     $bucket_key Bucket key.
    * @return  string  Cache key.
    * @task cache
    */
@@ -235,9 +235,10 @@
    * Normally, this operates as a readthrough cache call. It can also be used
    * to force a cache update by passing the existing data to `$rebuild_data`.
    *
-   * @param   int     Bucket key, from @{method:getBucketKey}.
-   * @param   mixed   Current data, to force a cache rebuild of this bucket.
-   * @return  array   Data from the cache.
+   * @param   int    $bucket_key Bucket key, from @{method:getBucketKey}.
+   * @param   mixed? $rebuild_data Current data, to force a cache rebuild of
+   *                 this bucket.
+   * @return  array  Data from the cache.
    * @task cache
    */
   private function getBucketData($bucket_key, $rebuild_data = null) {
@@ -287,9 +288,9 @@
   /**
    * Rebuild a cache bucket, amending existing data if available.
    *
-   * @param   int     Bucket key, from @{method:getBucketKey}.
-   * @param   array   Existing bucket data.
-   * @return  array   Rebuilt bucket data.
+   * @param   int   $bucket_key Bucket key, from @{method:getBucketKey}.
+   * @param   array $current_data Existing bucket data.
+   * @return  array Rebuilt bucket data.
    * @task cache
    */
   private function rebuildBucket($bucket_key, array $current_data) {
diff --git a/src/applications/repository/storage/PhabricatorRepository.php b/src/applications/repository/storage/PhabricatorRepository.php
--- a/src/applications/repository/storage/PhabricatorRepository.php
+++ b/src/applications/repository/storage/PhabricatorRepository.php
@@ -1288,7 +1288,7 @@
   /**
    * Determine if a protocol is SSH or SSH-like.
    *
-   * @param string A protocol string, like "http" or "ssh".
+   * @param string $protocol A protocol string, like "http" or "ssh".
    * @return bool True if the protocol is SSH-like.
    * @task uri
    */
@@ -1701,7 +1701,7 @@
    * 2037). We adjust the pull frequency based on when the most recent commit
    * occurred.
    *
-   * @param   int   The minimum update interval to use, in seconds.
+   * @param   int? $minimum The minimum update interval to use, in seconds.
    * @return  int   Repository update interval, in seconds.
    */
   public function loadUpdateInterval($minimum = 15) {
@@ -1836,8 +1836,8 @@
    * with repository services. This method provides lower-level resolution of
    * services, returning raw URIs.
    *
-   * @param PhabricatorUser Viewing user.
-   * @param map<string, wild> Constraints on selectable services.
+   * @param PhabricatorUser $viewer Viewing user.
+   * @param map<string, wild> $options Constraints on selectable services.
    * @return string|null URI, or `null` for local repositories.
    */
   public function getAlmanacServiceURI(
@@ -2168,8 +2168,8 @@
    *
    * For lower-level service resolution, see @{method:getAlmanacServiceURI}.
    *
-   * @param PhabricatorUser Viewing user.
-   * @param bool `true` to throw if a client would be returned.
+   * @param PhabricatorUser $viewer Viewing user.
+   * @param bool? $never_proxy `true` to throw if a client would be returned.
    * @return ConduitClient|null Client, or `null` for local repositories.
    */
   public function newConduitClient(
diff --git a/src/applications/search/engine/PhabricatorApplicationSearchEngine.php b/src/applications/search/engine/PhabricatorApplicationSearchEngine.php
--- a/src/applications/search/engine/PhabricatorApplicationSearchEngine.php
+++ b/src/applications/search/engine/PhabricatorApplicationSearchEngine.php
@@ -126,7 +126,7 @@
   /**
    * Create a saved query object from the request.
    *
-   * @param AphrontRequest The search request.
+   * @param AphrontRequest $request The search request.
    * @return PhabricatorSavedQuery
    */
   public function buildSavedQueryFromRequest(AphrontRequest $request) {
@@ -147,7 +147,7 @@
   /**
    * Executes the saved query.
    *
-   * @param PhabricatorSavedQuery The saved query to operate on.
+   * @param PhabricatorSavedQuery $original The saved query to operate on.
    * @return PhabricatorQuery The result of the query.
    */
   public function buildQueryFromSavedQuery(PhabricatorSavedQuery $original) {
@@ -201,7 +201,7 @@
    * hook to keep old queries working the way users expect, by reading,
    * adjusting, and overwriting parameters.
    *
-   * @param PhabricatorSavedQuery Saved query which will be executed.
+   * @param PhabricatorSavedQuery $saved Saved query which will be executed.
    * @return void
    */
   protected function willUseSavedQuery(PhabricatorSavedQuery $saved) {
@@ -215,8 +215,8 @@
   /**
    * Builds the search form using the request.
    *
-   * @param AphrontFormView       Form to populate.
-   * @param PhabricatorSavedQuery The query from which to build the form.
+   * @param AphrontFormView       $form  Form to populate.
+   * @param PhabricatorSavedQuery $saved Query from which to build the form.
    * @return void
    */
   public function buildSearchForm(
@@ -400,7 +400,7 @@
    * Return an application URI corresponding to the results page of a query.
    * Normally, this is something like `/application/query/QUERYKEY/`.
    *
-   * @param   string  The query key to build a URI for.
+   * @param   string  $query_key The query key to build a URI for.
    * @return  string  URI where the query can be executed.
    * @task uri
    */
@@ -730,9 +730,9 @@
    * links to pages (like "alincoln's open revisions") without needing to make
    * API calls.
    *
-   * @param AphrontRequest  Request to read user PHIDs from.
-   * @param string          Key to read in the request.
-   * @param list<const>     Other permitted PHID types.
+   * @param AphrontRequest  $request Request to read user PHIDs from.
+   * @param string          $key Key to read in the request.
+   * @param list<const>?    $allow_types Other permitted PHID types.
    * @return list<phid>     List of user PHIDs and selector functions.
    * @task read
    */
@@ -782,8 +782,8 @@
   /**
    * Read a list of subscribers from a request in a flexible way.
    *
-   * @param AphrontRequest  Request to read PHIDs from.
-   * @param string          Key to read in the request.
+   * @param AphrontRequest  $request Request to read PHIDs from.
+   * @param string          $key Key to read in the request.
    * @return list<phid>     List of object PHIDs.
    * @task read
    */
@@ -805,9 +805,10 @@
    * comma-delimited forms. Objects can be specified either by PHID or by
    * object name.
    *
-   * @param AphrontRequest  Request to read PHIDs from.
-   * @param string          Key to read in the request.
-   * @param list<const>     Optional, list of permitted PHID types.
+   * @param AphrontRequest  $request Request to read PHIDs from.
+   * @param string          $key Key to read in the request.
+   * @param list<const>?    $allow_types Optional, list of permitted PHID
+   *                        types.
    * @return list<phid>     List of object PHIDs.
    *
    * @task read
@@ -853,8 +854,8 @@
    * This provides flexibility when constructing URIs, especially from external
    * sources.
    *
-   * @param AphrontRequest  Request to read strings from.
-   * @param string          Key to read in the request.
+   * @param AphrontRequest  $request Request to read strings from.
+   * @param string          $key Key to read in the request.
    * @return list<string>   List of values.
    */
   protected function readListFromRequest(
diff --git a/src/applications/search/field/PhabricatorSearchField.php b/src/applications/search/field/PhabricatorSearchField.php
--- a/src/applications/search/field/PhabricatorSearchField.php
+++ b/src/applications/search/field/PhabricatorSearchField.php
@@ -33,7 +33,7 @@
    * The key should be a short, unique (within a search engine) string which
    * does not contain any special characters.
    *
-   * @param string Unique key which identifies the field.
+   * @param string $key Unique key which identifies the field.
    * @return this
    * @task config
    */
@@ -59,7 +59,7 @@
    *
    * This should be a short text string, like "Reviewers" or "Colors".
    *
-   * @param string Short, human-readable field label.
+   * @param string $label Short, human-readable field label.
    * @return this
    * task config
    */
@@ -86,7 +86,7 @@
    * Engines do not need to do this explicitly; it will be done on their
    * behalf by the caller.
    *
-   * @param PhabricatorUser Viewer.
+   * @param PhabricatorUser $viewer Viewer.
    * @return this
    * @task config
    */
@@ -115,7 +115,7 @@
    * an alias like `authors` to let users write `&authors=alincoln` instead of
    * `&authorPHIDs=alincoln`. This is a little easier to use.
    *
-   * @param list<string> List of aliases for this field.
+   * @param list<string> $aliases List of aliases for this field.
    * @return this
    * @task config
    */
@@ -142,7 +142,7 @@
    * This can allow you to choose a more usable key for API endpoints.
    * If no key is provided, the main key is used.
    *
-   * @param string Alternate key for Conduit.
+   * @param string $conduit_key Alternate key for Conduit.
    * @return this
    * @task config
    */
@@ -170,7 +170,7 @@
   /**
    * Set a human-readable description for this field.
    *
-   * @param string Human-readable description.
+   * @param string $description Human-readable description.
    * @return this
    * @task config
    */
@@ -194,7 +194,7 @@
   /**
    * Hide this field from the web UI.
    *
-   * @param bool True to hide the field from the web UI.
+   * @param bool $is_hidden True to hide the field from the web UI.
    * @return this
    * @task config
    */
@@ -400,8 +400,8 @@
    * This provides flexibility when constructing URIs, especially from external
    * sources.
    *
-   * @param AphrontRequest  Request to read strings from.
-   * @param string          Key to read in the request.
+   * @param AphrontRequest  $request Request to read strings from.
+   * @param string          $key Key to read in the request.
    * @return list<string>   List of values.
    * @task utility
    */
diff --git a/src/applications/search/fulltextstorage/PhabricatorFulltextStorageEngine.php b/src/applications/search/fulltextstorage/PhabricatorFulltextStorageEngine.php
--- a/src/applications/search/fulltextstorage/PhabricatorFulltextStorageEngine.php
+++ b/src/applications/search/fulltextstorage/PhabricatorFulltextStorageEngine.php
@@ -47,7 +47,7 @@
   /**
    * Update the index for an abstract document.
    *
-   * @param PhabricatorSearchAbstractDocument Document to update.
+   * @param PhabricatorSearchAbstractDocument $document Document to update.
    * @return void
    */
   abstract public function reindexAbstractDocument(
@@ -56,7 +56,7 @@
   /**
    * Execute a search query.
    *
-   * @param PhabricatorSavedQuery A query to execute.
+   * @param PhabricatorSavedQuery $query A query to execute.
    * @return list A list of matching PHIDs.
    */
   abstract public function executeSearch(PhabricatorSavedQuery $query);
diff --git a/src/applications/settings/panel/PhabricatorSettingsPanel.php b/src/applications/settings/panel/PhabricatorSettingsPanel.php
--- a/src/applications/settings/panel/PhabricatorSettingsPanel.php
+++ b/src/applications/settings/panel/PhabricatorSettingsPanel.php
@@ -222,7 +222,7 @@
    * Generally, render your settings panel by returning a form, then return
    * a redirect when the user saves settings.
    *
-   * @param   AphrontRequest  Incoming request.
+   * @param   AphrontRequest  $request Incoming request.
    * @return  wild            Response to request, either as an
    *                          @{class:AphrontResponse} or something which can
    *                          be composed into a @{class:AphrontView}.
@@ -234,7 +234,7 @@
   /**
    * Get the URI for this panel.
    *
-   * @param string? Optional path to append.
+   * @param string? $path Optional path to append.
    * @return string Relative URI for the panel.
    * @task panel
    */
diff --git a/src/applications/settings/query/PhabricatorUserPreferencesQuery.php b/src/applications/settings/query/PhabricatorUserPreferencesQuery.php
--- a/src/applications/settings/query/PhabricatorUserPreferencesQuery.php
+++ b/src/applications/settings/query/PhabricatorUserPreferencesQuery.php
@@ -49,7 +49,8 @@
    * If no settings exist for a user, a new empty settings object with
    * appropriate defaults is returned.
    *
-   * @param bool True to generate synthetic preferences for missing users.
+   * @param bool $synthetic True to generate synthetic preferences for missing
+   *   users.
    */
   public function needSyntheticPreferences($synthetic) {
     $this->synthetic = $synthetic;
diff --git a/src/applications/settings/storage/PhabricatorUserPreferences.php b/src/applications/settings/storage/PhabricatorUserPreferences.php
--- a/src/applications/settings/storage/PhabricatorUserPreferences.php
+++ b/src/applications/settings/storage/PhabricatorUserPreferences.php
@@ -119,7 +119,7 @@
   /**
    * Load or create a preferences object for the given user.
    *
-   * @param PhabricatorUser User to load or create preferences for.
+   * @param PhabricatorUser $user User to load or create preferences for.
    */
   public static function loadUserPreferences(PhabricatorUser $user) {
     return id(new PhabricatorUserPreferencesQuery())
@@ -134,7 +134,7 @@
    *
    * If no global preferences exist, an empty preferences object is returned.
    *
-   * @param PhabricatorUser Viewing user.
+   * @param PhabricatorUser $viewer Viewing user.
    */
   public static function loadGlobalPreferences(PhabricatorUser $viewer) {
     $global = id(new PhabricatorUserPreferencesQuery())
diff --git a/src/applications/spaces/query/PhabricatorSpacesNamespaceQuery.php b/src/applications/spaces/query/PhabricatorSpacesNamespaceQuery.php
--- a/src/applications/spaces/query/PhabricatorSpacesNamespaceQuery.php
+++ b/src/applications/spaces/query/PhabricatorSpacesNamespaceQuery.php
@@ -212,7 +212,7 @@
    * This is intended to simplify performing a bunch of redundant checks; you
    * can intentionally pass any value in (including `null`).
    *
-   * @param wild
+   * @param wild $object
    * @return phid|null
    */
   public static function getObjectSpacePHID($object) {
diff --git a/src/applications/subscriptions/editor/PhabricatorSubscriptionsEditor.php b/src/applications/subscriptions/editor/PhabricatorSubscriptionsEditor.php
--- a/src/applications/subscriptions/editor/PhabricatorSubscriptionsEditor.php
+++ b/src/applications/subscriptions/editor/PhabricatorSubscriptionsEditor.php
@@ -18,7 +18,7 @@
    * (or been subscribed) to the object, and will be added even if they
    * had previously unsubscribed.
    *
-   * @param list<phid>  List of PHIDs to explicitly subscribe.
+   * @param list<phid> $phids List of PHIDs to explicitly subscribe.
    * @return this
    */
   public function subscribeExplicit(array $phids) {
@@ -32,7 +32,7 @@
    * implicitly subscribes them (e.g., adding a comment) but it will be
    * suppressed if they've previously unsubscribed from the object.
    *
-   * @param list<phid>  List of PHIDs to implicitly subscribe.
+   * @param list<phid> $phids List of PHIDs to implicitly subscribe.
    * @return this
    */
   public function subscribeImplicit(array $phids) {
@@ -45,7 +45,7 @@
    * Unsubscribe PHIDs and mark them as unsubscribed, so implicit subscriptions
    * will not resubscribe them.
    *
-   * @param list<phid>  List of PHIDs to unsubscribe.
+   * @param list<phid> $phids List of PHIDs to unsubscribe.
    * @return this
    */
   public function unsubscribe(array $phids) {
diff --git a/src/applications/subscriptions/interface/PhabricatorSubscribableInterface.php b/src/applications/subscriptions/interface/PhabricatorSubscribableInterface.php
--- a/src/applications/subscriptions/interface/PhabricatorSubscribableInterface.php
+++ b/src/applications/subscriptions/interface/PhabricatorSubscribableInterface.php
@@ -8,7 +8,8 @@
    * irrevocably a subscriber). This will, e.g., cause the UI to render
    * "Automatically Subscribed" instead of "Subscribe".
    *
-   * @param PHID  PHID (presumably a user) to test for automatic subscription.
+   * @param PHID $phid PHID (presumably a user) to test for automatic
+   *   subscription.
    * @return bool True if the object/user is automatically subscribed.
    */
   public function isAutomaticallySubscribed($phid);
diff --git a/src/applications/system/engine/PhabricatorSystemActionEngine.php b/src/applications/system/engine/PhabricatorSystemActionEngine.php
--- a/src/applications/system/engine/PhabricatorSystemActionEngine.php
+++ b/src/applications/system/engine/PhabricatorSystemActionEngine.php
@@ -33,9 +33,9 @@
    * If any actor is exceeding their rate limit, this method throws a
    * @{class:PhabricatorSystemActionRateLimitException}.
    *
-   * @param list<string> List of actors.
-   * @param PhabricatorSystemAction Action being taken.
-   * @param float Score or credit, see above.
+   * @param list<string> $actors List of actors.
+   * @param PhabricatorSystemAction $action Action being taken.
+   * @param float $score Score or credit, see above.
    * @return void
    */
   public static function willTakeAction(
@@ -174,7 +174,7 @@
    * Reset all action counts for actions taken by some set of actors in the
    * previous action window.
    *
-   * @param list<string> Actors to reset counts for.
+   * @param list<string> $actors Actors to reset counts for.
    * @return int Number of actions cleared.
    */
   public static function resetActions(array $actors) {
diff --git a/src/applications/transactions/editengine/PhabricatorEditEngine.php b/src/applications/transactions/editengine/PhabricatorEditEngine.php
--- a/src/applications/transactions/editengine/PhabricatorEditEngine.php
+++ b/src/applications/transactions/editengine/PhabricatorEditEngine.php
@@ -343,7 +343,7 @@
    * Set default placeholder plain text in the comment textarea of the engine.
    * To be overwritten by conditions defined in the child EditEngine class.
    *
-   * @param  object Object in which the comment textarea is displayed.
+   * @param  object $object Object in which the comment textarea is displayed.
    * @return string Placeholder text to display in the comment textarea.
    * @task text
    */
@@ -678,7 +678,7 @@
    * Initialize a new object for object creation via Conduit.
    *
    * @return object Newly initialized object.
-   * @param list<wild> Raw transactions.
+   * @param list<wild> $raw_xactions Raw transactions.
    * @task load
    */
   protected function newEditableObjectFromConduit(array $raw_xactions) {
@@ -698,7 +698,7 @@
   /**
    * Flag this workflow as a create or edit.
    *
-   * @param bool True if this is a create workflow.
+   * @param bool $is_create True if this is a create workflow.
    * @return this
    * @task load
    */
@@ -712,9 +712,9 @@
    * Try to load an object by ID, PHID, or monogram. This is done primarily
    * to make Conduit a little easier to use.
    *
-   * @param wild ID, PHID, or monogram.
-   * @param list<const> List of required capability constants, or omit for
-   *   defaults.
+   * @param wild $identifier ID, PHID, or monogram.
+   * @param list<const>? $capabilities List of required capability constants,
+   *   or omit for defaults.
    * @return object Corresponding editable object.
    * @task load
    */
@@ -792,9 +792,9 @@
   /**
    * Load an object by ID.
    *
-   * @param int Object ID.
-   * @param list<const> List of required capability constants, or omit for
-   *   defaults.
+   * @param int $id Object ID.
+   * @param list<const>? $capabilities List of required capability constants,
+   *   or omit for defaults.
    * @return object|null Object, or null if no such object exists.
    * @task load
    */
@@ -809,9 +809,9 @@
   /**
    * Load an object by PHID.
    *
-   * @param phid Object PHID.
-   * @param list<const> List of required capability constants, or omit for
-   *   defaults.
+   * @param phid $phid Object PHID.
+   * @param list<const>? $capabilities List of required capability constants,
+   *   or omit for defaults.
    * @return object|null Object, or null if no such object exists.
    * @task load
    */
@@ -826,9 +826,9 @@
   /**
    * Load an object given a configured query.
    *
-   * @param PhabricatorPolicyAwareQuery Configured query.
-   * @param list<const> List of required capability constants, or omit for
-   *  defaults.
+   * @param PhabricatorPolicyAwareQuery $query Configured query.
+   * @param list<const>? $capabilities List of required capability constants,
+   *  or omit for defaults.
    * @return object|null Object, or null if no such object exists.
    * @task load
    */
@@ -860,7 +860,7 @@
   /**
    * Verify that an object is appropriate for editing.
    *
-   * @param wild Loaded value.
+   * @param wild $object Loaded value.
    * @return void
    * @task load
    */
@@ -1767,7 +1767,7 @@
   /**
    * Respond to a request for documentation on HTTP parameters.
    *
-   * @param object Editable object.
+   * @param object $object Editable object.
    * @return AphrontResponse Response object.
    * @task http
    */
@@ -2244,10 +2244,10 @@
    * Generate transactions which can be applied from edit actions in a Conduit
    * request.
    *
-   * @param ConduitAPIRequest The request.
-   * @param list<wild> Raw conduit transactions.
-   * @param list<PhabricatorEditType> Supported edit types.
-   * @param PhabricatorApplicationTransaction Template transaction.
+   * @param ConduitAPIRequest $request The request.
+   * @param list<wild> $xactions Raw conduit transactions.
+   * @param list<PhabricatorEditType> $types Supported edit types.
+   * @param PhabricatorApplicationTransaction $template Template transaction.
    * @return list<PhabricatorApplicationTransaction> Generated transactions.
    * @task conduit
    */
diff --git a/src/applications/transactions/editfield/PhabricatorEditField.php b/src/applications/transactions/editfield/PhabricatorEditField.php
--- a/src/applications/transactions/editfield/PhabricatorEditField.php
+++ b/src/applications/transactions/editfield/PhabricatorEditField.php
@@ -573,8 +573,8 @@
    * Most fields do not need to store these values or deal with initial value
    * handling.
    *
-   * @param AphrontRequest Request to read from.
-   * @param string Key to read.
+   * @param AphrontRequest $request Request to read from.
+   * @param string $key Key to read.
    * @return wild Value read from request.
    */
   protected function getInitialValueFromSubmit(AphrontRequest $request, $key) {
diff --git a/src/applications/transactions/editor/PhabricatorApplicationTransactionEditor.php b/src/applications/transactions/editor/PhabricatorApplicationTransactionEditor.php
--- a/src/applications/transactions/editor/PhabricatorApplicationTransactionEditor.php
+++ b/src/applications/transactions/editor/PhabricatorApplicationTransactionEditor.php
@@ -140,7 +140,8 @@
    * nothing (e.g., empty comment with a status change that has already been
    * performed by another user).
    *
-   * @param bool  True to drop transactions without effect and continue.
+   * @param bool $continue True to drop transactions without effect and
+  *     continue.
    * @return this
    */
   public function setContinueOnNoEffect($continue) {
@@ -168,8 +169,8 @@
    * (like the priority, batch, and merge editors in Maniphest), these
    * operations can continue to function even if an object is outdated.
    *
-   * @param bool  True to continue when transactions don't completely satisfy
-   *              all required fields.
+   * @param bool $continue_on_missing_fields True to continue when transactions
+   *              don't completely satisfy all required fields.
    * @return this
    */
   public function setContinueOnMissingFields($continue_on_missing_fields) {
@@ -2853,11 +2854,11 @@
    * missing, by detecting that the object has no field value and there is no
    * transaction which sets one.
    *
-   * @param PhabricatorLiskDAO Object being edited.
-   * @param string Transaction type to validate.
-   * @param list<PhabricatorApplicationTransaction> Transactions of given type,
-   *   which may be empty if the edit does not apply any transactions of the
-   *   given type.
+   * @param PhabricatorLiskDAO $object Object being edited.
+   * @param string $type Transaction type to validate.
+   * @param list<PhabricatorApplicationTransaction> $xactions Transactions of
+   *   given type, which may be empty if the edit does not apply any
+   *   transactions of the given type.
    * @return list<PhabricatorApplicationTransactionValidationError> List of
    *   validation errors.
    */
@@ -3277,9 +3278,9 @@
    * This will return `true` if the net effect of the object and transactions
    * is an empty field.
    *
-   * @param wild Current field value.
-   * @param list<PhabricatorApplicationTransaction> Transactions editing the
-   *          field.
+   * @param wild $field_value Current field value.
+   * @param list<PhabricatorApplicationTransaction> $xactions Transactions
+   *          editing the field.
    * @return bool True if the field will be an empty text field after edits.
    */
   protected function validateIsEmptyTextField($field_value, array $xactions) {
@@ -4600,7 +4601,8 @@
    *
    * This method is used to load state when running worker operations.
    *
-   * @param dict<string, wild> Editor state, from @{method:getWorkerState}.
+   * @param dict<string, wild> $state Editor state, from
+        @{method:getWorkerState}.
    * @return this
    * @task workers
    */
@@ -4626,7 +4628,7 @@
    * Hook; set custom properties on the editor from data emitted by
    * @{method:getCustomWorkerState}.
    *
-   * @param dict<string, wild> Custom state,
+   * @param dict<string, wild> $state Custom state,
    *   from @{method:getCustomWorkerState}.
    * @return this
    * @task workers
@@ -4674,8 +4676,8 @@
    *
    * See @{method:getCustomWorkerStateEncoding}.
    *
-   * @param map<string, wild> Map of values to encode.
-   * @param map<string, string> Map of encodings to apply.
+   * @param map<string, wild> $state Map of values to encode.
+   * @param map<string, string> $encodings Map of encodings to apply.
    * @return map<string, wild> Map of encoded values.
    * @task workers
    */
@@ -4720,8 +4722,8 @@
    *
    * See @{method:getCustomWorkerStateEncoding}.
    *
-   * @param map<string, wild> Map of encoded values.
-   * @param map<string, string> Map of encodings.
+   * @param map<string, wild> $state Map of encoded values.
+   * @param map<string, string> $encodings Map of encodings.
    * @return map<string, wild> Map of decoded values.
    * @task workers
    */
@@ -4759,7 +4761,7 @@
    * If the list of PHIDs include mutually exclusive projects, remove the
    * conflicting projects.
    *
-   * @param list<phid> List of project PHIDs.
+   * @param list<phid> $phids List of project PHIDs.
    * @return list<phid> List with conflicts removed.
    */
   private function applyProjectConflictRules(array $phids) {
diff --git a/src/applications/transactions/storage/PhabricatorApplicationTransaction.php b/src/applications/transactions/storage/PhabricatorApplicationTransaction.php
--- a/src/applications/transactions/storage/PhabricatorApplicationTransaction.php
+++ b/src/applications/transactions/storage/PhabricatorApplicationTransaction.php
@@ -1696,7 +1696,7 @@
    * Should this transaction be visually grouped with an existing transaction
    * group?
    *
-   * @param list<PhabricatorApplicationTransaction> List of transactions.
+   * @param list<PhabricatorApplicationTransaction> $group List of transactions.
    * @return bool True to display in a group with the other transactions.
    */
   public function shouldDisplayGroupWith(array $group) {
diff --git a/src/applications/transactions/storage/PhabricatorModularTransactionType.php b/src/applications/transactions/storage/PhabricatorModularTransactionType.php
--- a/src/applications/transactions/storage/PhabricatorModularTransactionType.php
+++ b/src/applications/transactions/storage/PhabricatorModularTransactionType.php
@@ -428,8 +428,9 @@
    * additional capability or policy requirement above and beyond CAN_EDIT, it
    * is usually better implemented as a validation check.
    *
-   * @param object Object being edited.
-   * @param PhabricatorApplicationTransaction Transaction being applied.
+   * @param object $object Object being edited.
+   * @param PhabricatorApplicationTransaction $xaction Transaction being
+   *    applied.
    * @return null|const|list<const> A capability constant (or list of
    *    capability constants) which the actor must have on the object. You can
    *    return `null` as a shorthand for "no capabilities are required".
diff --git a/src/applications/typeahead/datasource/PhabricatorTypeaheadDatasource.php b/src/applications/typeahead/datasource/PhabricatorTypeaheadDatasource.php
--- a/src/applications/typeahead/datasource/PhabricatorTypeaheadDatasource.php
+++ b/src/applications/typeahead/datasource/PhabricatorTypeaheadDatasource.php
@@ -212,7 +212,7 @@
    * For datasources backed by database objects, this is often much less
    * efficient than filtering at the query level.
    *
-   * @param list<PhabricatorTypeaheadResult> List of typeahead results.
+   * @param list<PhabricatorTypeaheadResult> $results List of typeahead results.
    * @return list<PhabricatorTypeaheadResult> Filtered results.
    */
   protected function filterResultsAgainstTokens(array $results) {
diff --git a/src/infrastructure/cache/PhutilInRequestKeyValueCache.php b/src/infrastructure/cache/PhutilInRequestKeyValueCache.php
--- a/src/infrastructure/cache/PhutilInRequestKeyValueCache.php
+++ b/src/infrastructure/cache/PhutilInRequestKeyValueCache.php
@@ -26,7 +26,7 @@
    * When too many keys are inserted, the oldest keys are removed from the
    * cache. Setting a limit of `0` disables the cache.
    *
-   * @param int Maximum number of items to store in the cache.
+   * @param int $limit Maximum number of items to store in the cache.
    * @return this
    */
   public function setLimit($limit) {
diff --git a/src/infrastructure/cache/PhutilKeyValueCache.php b/src/infrastructure/cache/PhutilKeyValueCache.php
--- a/src/infrastructure/cache/PhutilKeyValueCache.php
+++ b/src/infrastructure/cache/PhutilKeyValueCache.php
@@ -30,9 +30,9 @@
    * Get a single key from cache. See @{method:getKeys} to get multiple keys at
    * once.
    *
-   * @param   string  Key to retrieve.
-   * @param   wild    Optional value to return if the key is not found. By
-   *                  default, returns null.
+   * @param   string  $key Key to retrieve.
+   * @param   wild?   $default Optional value to return if the key is not
+   *                  found. By default, returns null.
    * @return  wild    Cache value (on cache hit) or default value (on cache
    *                  miss).
    * @task kvimpl
@@ -49,9 +49,9 @@
    *
    * See @{method:setKeys} for a description of TTLs.
    *
-   * @param   string    Key to set.
-   * @param   wild      Value to set.
-   * @param   int|null  Optional TTL.
+   * @param   string    $key Key to set.
+   * @param   wild      $value Value to set.
+   * @param   int|null? $ttl Optional TTL.
    * @return  this
    * @task kvimpl
    */
@@ -64,7 +64,7 @@
    * Delete a key from the cache. See @{method:deleteKeys} to delete multiple
    * keys at once.
    *
-   * @param   string  Key to delete.
+   * @param   string $key Key to delete.
    * @return  this
    * @task kvimpl
    */
@@ -76,7 +76,7 @@
   /**
    * Get data from the cache.
    *
-   * @param   list<string>        List of cache keys to retrieve.
+   * @param   list<string>        $keys List of cache keys to retrieve.
    * @return  dict<string, wild>  Dictionary of keys that were found in the
    *                              cache. Keys not present in the cache are
    *                              omitted, so you can detect a cache miss.
@@ -92,8 +92,8 @@
    * after a specified number of seconds. By default, there is no expiration
    * policy and data will persist in cache indefinitely.
    *
-   * @param dict<string, wild>  Map of cache keys to values.
-   * @param int|null            TTL for cache keys, in seconds.
+   * @param dict<string, wild>  $keys Map of cache keys to values.
+   * @param int|null?           $ttl TTL for cache keys, in seconds.
    * @return this
    * @task kvimpl
    */
@@ -103,7 +103,7 @@
   /**
    * Delete a list of keys from the cache.
    *
-   * @param list<string> List of keys to delete.
+   * @param list<string> $keys List of keys to delete.
    * @return this
    * @task kvimpl
    */
diff --git a/src/infrastructure/cache/PhutilKeyValueCacheProfiler.php b/src/infrastructure/cache/PhutilKeyValueCacheProfiler.php
--- a/src/infrastructure/cache/PhutilKeyValueCacheProfiler.php
+++ b/src/infrastructure/cache/PhutilKeyValueCacheProfiler.php
@@ -17,7 +17,7 @@
   /**
    * Set a profiler for cache operations.
    *
-   * @param PhutilServiceProfiler Service profiler.
+   * @param PhutilServiceProfiler $profiler Service profiler.
    * @return this
    * @task kvimpl
    */
diff --git a/src/infrastructure/cache/PhutilKeyValueCacheStack.php b/src/infrastructure/cache/PhutilKeyValueCacheStack.php
--- a/src/infrastructure/cache/PhutilKeyValueCacheStack.php
+++ b/src/infrastructure/cache/PhutilKeyValueCacheStack.php
@@ -38,7 +38,8 @@
   /**
    * Set the caches which comprise this stack.
    *
-   * @param   list<PhutilKeyValueCache> Ordered list of key-value caches.
+   * @param   list<PhutilKeyValueCache> $caches Ordered list of key-value
+   *   caches.
    * @return  this
    * @task    config
    */
@@ -62,7 +63,7 @@
    *   // TTL does not persist; this will use no TTL.
    *   $stack->getKey('hedgehog');
    *
-   * @param   int TTL in seconds.
+   * @param   int $ttl TTL in seconds.
    * @return  this
    *
    * @task    config
diff --git a/src/infrastructure/cache/PhutilMemcacheKeyValueCache.php b/src/infrastructure/cache/PhutilMemcacheKeyValueCache.php
--- a/src/infrastructure/cache/PhutilMemcacheKeyValueCache.php
+++ b/src/infrastructure/cache/PhutilMemcacheKeyValueCache.php
@@ -100,7 +100,7 @@
    *       ),
    *    ));
    *
-   * @param   list<dict>  List of server specifications.
+   * @param   list<dict> $servers List of server specifications.
    * @return  this
    * @task memcache
    */
diff --git a/src/infrastructure/contentsource/PhabricatorContentSource.php b/src/infrastructure/contentsource/PhabricatorContentSource.php
--- a/src/infrastructure/contentsource/PhabricatorContentSource.php
+++ b/src/infrastructure/contentsource/PhabricatorContentSource.php
@@ -22,10 +22,10 @@
   /**
    * Construct a new content source object.
    *
-   * @param const The source type constant to build a source for.
-   * @param array Source parameters.
-   * @param bool True to suppress errors and force construction of a source
-   *   even if the source type is not valid.
+   * @param const $source The source type constant to build a source for.
+   * @param array? $params Source parameters.
+   * @param bool? $force True to suppress errors and force construction of a
+   *   source even if the source type is not valid.
    * @return PhabricatorContentSource New source object.
    */
   final public static function newForSource(
diff --git a/src/infrastructure/customfield/field/PhabricatorCustomField.php b/src/infrastructure/customfield/field/PhabricatorCustomField.php
--- a/src/infrastructure/customfield/field/PhabricatorCustomField.php
+++ b/src/infrastructure/customfield/field/PhabricatorCustomField.php
@@ -243,7 +243,7 @@
    * For general implementations, the general field implementation can return
    * multiple field instances here.
    *
-   * @param object The object to create fields for.
+   * @param object $object The object to create fields for.
    * @return list<PhabricatorCustomField> List of fields.
    * @task core
    */
@@ -382,7 +382,7 @@
    * Set the proxy implementation for this field. See @{method:canSetProxy} for
    * discussion of field proxies.
    *
-   * @param PhabricatorCustomField Field implementation.
+   * @param PhabricatorCustomField $proxy Field implementation.
    * @return this
    * @task proxy
    */
@@ -421,7 +421,8 @@
   /**
    * Sets the object this field belongs to.
    *
-   * @param PhabricatorCustomFieldInterface The object this field belongs to.
+   * @param PhabricatorCustomFieldInterface $object The object this field
+   *   belongs to.
    * @return this
    * @task context
    */
@@ -440,7 +441,8 @@
   /**
    * Read object data into local field storage, if applicable.
    *
-   * @param PhabricatorCustomFieldInterface The object this field belongs to.
+   * @param PhabricatorCustomFieldInterface $object The object this field
+   *   belongs to.
    * @return this
    * @task context
    */
@@ -607,7 +609,7 @@
    * need to undo whatever serialization you applied in
    * @{method:getValueForStorage}.
    *
-   * @param string|null Serialized field representation (from
+   * @param string|null $value Serialized field representation (from
    *                    @{method:getValueForStorage}) or null if no value has
    *                    ever been stored.
    * @return this
@@ -729,7 +731,7 @@
   /**
    * Build and populate storage for a string index.
    *
-   * @param string String to index.
+   * @param string $value String to index.
    * @return PhabricatorCustomFieldStringIndexStorage Populated storage.
    * @task appsearch
    */
@@ -748,7 +750,7 @@
   /**
    * Build and populate storage for a numeric index.
    *
-   * @param string Numeric value to index.
+   * @param string $value Numeric value to index.
    * @return PhabricatorCustomFieldNumericIndexStorage Populated storage.
    * @task appsearch
    */
@@ -767,8 +769,9 @@
    * Read a query value from a request, for storage in a saved query. Normally,
    * this method should, e.g., read a string out of the request.
    *
-   * @param PhabricatorApplicationSearchEngine Engine building the query.
-   * @param AphrontRequest Request to read from.
+   * @param PhabricatorApplicationSearchEngine $engine Engine building the
+   *   query.
+   * @param AphrontRequest $request Request to read from.
    * @return wild
    * @task appsearch
    */
@@ -789,9 +792,10 @@
    * use `with...()` methods to apply filters or other constraints to the
    * query.
    *
-   * @param PhabricatorApplicationSearchEngine Engine executing the query.
-   * @param PhabricatorCursorPagedPolicyAwareQuery Query to constrain.
-   * @param wild Constraint provided by the user.
+   * @param PhabricatorApplicationSearchEngine $engine Engine executing the
+   *   query.
+   * @param PhabricatorCursorPagedPolicyAwareQuery $query Query to constrain.
+   * @param wild $value Constraint provided by the user.
    * @return void
    * @task appsearch
    */
@@ -812,9 +816,10 @@
   /**
    * Append search controls to the interface.
    *
-   * @param PhabricatorApplicationSearchEngine Engine constructing the form.
-   * @param AphrontFormView The form to update.
-   * @param wild Value from the saved query.
+   * @param PhabricatorApplicationSearchEngine $engine Engine constructing the
+   *   form.
+   * @param AphrontFormView $form The form to update.
+   * @param wild $value Value from the saved query.
    * @return void
    * @task appsearch
    */
@@ -1000,12 +1005,12 @@
    * when a transaction would set a field to an invalid value, or when a field
    * is required but no transactions provide value.
    *
-   * @param PhabricatorLiskDAO Editor applying the transactions.
-   * @param string Transaction type. This type is always
+   * @param PhabricatorLiskDAO $editor Editor applying the transactions.
+   * @param string $type Transaction type. This type is always
    *   `PhabricatorTransactions::TYPE_CUSTOMFIELD`, it is provided for
    *   convenience when constructing exceptions.
-   * @param list<PhabricatorApplicationTransaction> Transactions being applied,
-   *   which may be empty if this field is not being edited.
+   * @param list<PhabricatorApplicationTransaction> $xactions Transactions
+   *   being applied, which may be empty if this field is not being edited.
    * @return list<PhabricatorApplicationTransactionValidationError> Validation
    *   errors.
    *
@@ -1566,7 +1571,7 @@
   /**
    * Get the Herald value type for the given condition.
    *
-   * @param   const       Herald condition constant.
+   * @param   const       $condition Herald condition constant.
    * @return  const|null  Herald value type, or null to use the default.
    * @task herald
    */
diff --git a/src/infrastructure/customfield/field/PhabricatorCustomFieldList.php b/src/infrastructure/customfield/field/PhabricatorCustomFieldList.php
--- a/src/infrastructure/customfield/field/PhabricatorCustomFieldList.php
+++ b/src/infrastructure/customfield/field/PhabricatorCustomFieldList.php
@@ -46,7 +46,8 @@
   /**
    * Read stored values for all fields which support storage.
    *
-   * @param PhabricatorCustomFieldInterface Object to read field values for.
+   * @param PhabricatorCustomFieldInterface $object Object to read field values
+   *   for.
    * @return void
    */
   public function readFieldsFromStorage(
diff --git a/src/infrastructure/customfield/storage/PhabricatorCustomFieldStorage.php b/src/infrastructure/customfield/storage/PhabricatorCustomFieldStorage.php
--- a/src/infrastructure/customfield/storage/PhabricatorCustomFieldStorage.php
+++ b/src/infrastructure/customfield/storage/PhabricatorCustomFieldStorage.php
@@ -44,7 +44,7 @@
    * The keys in the result should correspond to the keys in the input. The
    * fields in the list may belong to different objects.
    *
-   * @param map<string, PhabricatorCustomField> Map of fields.
+   * @param map<string, PhabricatorCustomField> $fields Map of fields.
    * @return map<String, PhabricatorCustomField> Map of available field data.
    */
   final public function loadStorageSourceData(array $fields) {
diff --git a/src/infrastructure/daemon/PhabricatorDaemon.php b/src/infrastructure/daemon/PhabricatorDaemon.php
--- a/src/infrastructure/daemon/PhabricatorDaemon.php
+++ b/src/infrastructure/daemon/PhabricatorDaemon.php
@@ -24,7 +24,7 @@
    * Format a command so it executes as the daemon user, if a daemon user is
    * defined. This wraps the provided command in `sudo -u ...`, roughly.
    *
-   * @param   PhutilCommandString Command to execute.
+   * @param   PhutilCommandString $command Command to execute.
    * @return  PhutilCommandString `sudo` version of the command.
    */
   public static function sudoCommandAsDaemonUser($command) {
diff --git a/src/infrastructure/daemon/PhutilDaemonHandle.php b/src/infrastructure/daemon/PhutilDaemonHandle.php
--- a/src/infrastructure/daemon/PhutilDaemonHandle.php
+++ b/src/infrastructure/daemon/PhutilDaemonHandle.php
@@ -328,8 +328,8 @@
   /**
    * Dispatch an event to event listeners.
    *
-   * @param  string Event type.
-   * @param  dict   Event parameters.
+   * @param  string $type Event type.
+   * @param  dict?  $params Event parameters.
    * @return void
    */
   private function dispatchEvent($type, array $params = array()) {
diff --git a/src/infrastructure/daemon/PhutilDaemonOverseerModule.php b/src/infrastructure/daemon/PhutilDaemonOverseerModule.php
--- a/src/infrastructure/daemon/PhutilDaemonOverseerModule.php
+++ b/src/infrastructure/daemon/PhutilDaemonOverseerModule.php
@@ -47,8 +47,8 @@
    *     return;
    *   }
    *
-   * @param string Throttle key.
-   * @param float Duration in seconds.
+   * @param string $name Throttle key.
+   * @param float $duration Duration in seconds.
    * @return bool True to throttle the check.
    */
   protected function shouldThrottle($name, $duration) {
diff --git a/src/infrastructure/daemon/workers/PhabricatorTriggerDaemon.php b/src/infrastructure/daemon/workers/PhabricatorTriggerDaemon.php
--- a/src/infrastructure/daemon/workers/PhabricatorTriggerDaemon.php
+++ b/src/infrastructure/daemon/workers/PhabricatorTriggerDaemon.php
@@ -122,7 +122,7 @@
    * Process all of the triggers which have been updated since the last time
    * the daemon ran, scheduling them into the event table.
    *
-   * @param int Cursor for the next version update to process.
+   * @param int $cursor Cursor for the next version update to process.
    * @return void
    */
   private function scheduleTriggers($cursor) {
@@ -326,7 +326,7 @@
   /**
    * Run the garbage collector for up to a specified number of seconds.
    *
-   * @param int Number of seconds the GC may run for.
+   * @param int $duration Number of seconds the GC may run for.
    * @return int Number of seconds remaining in the time budget.
    * @task garbage
    */
diff --git a/src/infrastructure/daemon/workers/PhabricatorWorker.php b/src/infrastructure/daemon/workers/PhabricatorWorker.php
--- a/src/infrastructure/daemon/workers/PhabricatorWorker.php
+++ b/src/infrastructure/daemon/workers/PhabricatorWorker.php
@@ -68,12 +68,12 @@
    * retrying. For most tasks you can leave this at `null`, which will give you
    * a short default retry period (currently 60 seconds).
    *
-   * @param  PhabricatorWorkerTask  The task itself. This object is probably
-   *                                useful mostly to examine the failure count
-   *                                if you want to implement staggered retries,
-   *                                or to examine the execution exception if
-   *                                you want to react to different failures in
-   *                                different ways.
+   * @param  PhabricatorWorkerTask  $task The task itself. This object is
+   *                                probably useful mostly to examine the
+   *                                failure count if you want to implement
+   *                                staggered retries, or to examine the
+   *                                execution exception if you want to react to
+   *                                different failures in different ways.
    * @return int|null               Number of seconds to wait between retries,
    *                                or null for a default retry period
    *                                (currently 60 seconds).
@@ -230,9 +230,9 @@
    *
    * The followup task will be queued only if this task completes cleanly.
    *
-   * @param string    Task class to queue.
-   * @param array     Data for the followup task.
-   * @param array Options for the followup task.
+   * @param string    $class Task class to queue.
+   * @param array     $data Data for the followup task.
+   * @param array?    $options Options for the followup task.
    * @return this
    */
   final protected function queueTask(
@@ -261,7 +261,7 @@
    * this method to force the queue to flush before failing (for example, if
    * you are using queues to improve locking behavior).
    *
-   * @param map<string, wild> Optional default options.
+   * @param map<string, wild>? $defaults Optional default options.
    */
   final public function flushTaskQueue($defaults = array()) {
     foreach ($this->getQueuedTasks() as $task) {
@@ -286,7 +286,7 @@
    * This method does not provide any assurances about when these tasks will
    * execute, or even guarantee that it will have any effect at all.
    *
-   * @param list<id> List of task IDs to try to awaken.
+   * @param list<id> $ids List of task IDs to try to awaken.
    * @return void
    */
   final public static function awakenTaskIDs(array $ids) {
diff --git a/src/infrastructure/daemon/workers/action/PhabricatorTriggerAction.php b/src/infrastructure/daemon/workers/action/PhabricatorTriggerAction.php
--- a/src/infrastructure/daemon/workers/action/PhabricatorTriggerAction.php
+++ b/src/infrastructure/daemon/workers/action/PhabricatorTriggerAction.php
@@ -28,7 +28,7 @@
   /**
    * Validate action configuration.
    *
-   * @param map<string, wild> Map of action properties.
+   * @param map<string, wild> $properties Map of action properties.
    * @return void
    */
   abstract public function validateProperties(array $properties);
@@ -62,10 +62,10 @@
    * may be simplest to pass the trigger time to the task and then make the
    * decision to discard the action there.
    *
-   * @param int|null Last time the event occurred, or null if it has never
-   *   triggered before.
-   * @param int The scheduled time for the current action. This may be
-   *   significantly different from the current time.
+   * @param int|null $last_epoch Last time the event occurred, or null if it
+   *   has never triggered before.
+   * @param int $this_epoch The scheduled time for the current action. This
+   *   may be significantly different from the current time.
    * @return void
    */
   abstract public function execute($last_epoch, $this_epoch);
diff --git a/src/infrastructure/daemon/workers/clock/PhabricatorTriggerClock.php b/src/infrastructure/daemon/workers/clock/PhabricatorTriggerClock.php
--- a/src/infrastructure/daemon/workers/clock/PhabricatorTriggerClock.php
+++ b/src/infrastructure/daemon/workers/clock/PhabricatorTriggerClock.php
@@ -32,7 +32,7 @@
   /**
    * Validate clock configuration.
    *
-   * @param map<string, wild> Map of clock properties.
+   * @param map<string, wild> $properties Map of clock properties.
    * @return void
    */
   abstract public function validateProperties(array $properties);
@@ -64,9 +64,10 @@
    * week to 3 minutes from now, the clock may reschedule the notification to
    * occur 12 minutes ago. This will cause it to execute immediately.
    *
-   * @param int|null Last time the event occurred, or null if it has never
-   *   triggered before.
-   * @param bool True if this is a reschedule after a successful trigger.
+   * @param int|null $last_epoch Last time the event occurred, or null if it
+   *   has never triggered before.
+   * @param bool $is_reschedule True if this is a reschedule after a successful
+   *   trigger.
    * @return int|null Next event, or null to decline to reschedule.
    */
   abstract public function getNextEventEpoch($last_epoch, $is_reschedule);
diff --git a/src/infrastructure/daemon/workers/query/PhabricatorWorkerLeaseQuery.php b/src/infrastructure/daemon/workers/query/PhabricatorWorkerLeaseQuery.php
--- a/src/infrastructure/daemon/workers/query/PhabricatorWorkerLeaseQuery.php
+++ b/src/infrastructure/daemon/workers/query/PhabricatorWorkerLeaseQuery.php
@@ -30,7 +30,7 @@
    * This can be used to show which tasks are coming up next without altering
    * the queue's behavior.
    *
-   * @param bool True to skip the lease acquisition step.
+   * @param bool $skip True to skip the lease acquisition step.
    */
   public function setSkipLease($skip) {
     $this->skipLease = $skip;
@@ -58,8 +58,8 @@
    * leasing using @{method:setSkipLease}. These options are intended for use
    * when displaying task status information.
    *
-   * @param mixed `true` to select only leased tasks, `false` to select only
-   *              unleased tasks (default), or `null` to select both.
+   * @param mixed $leased `true` to select only leased tasks, `false` to select
+   *              only unleased tasks (default), or `null` to select both.
    * @return this
    */
   public function withLeasedTasks($leased) {
diff --git a/src/infrastructure/daemon/workers/query/PhabricatorWorkerTriggerQuery.php b/src/infrastructure/daemon/workers/query/PhabricatorWorkerTriggerQuery.php
--- a/src/infrastructure/daemon/workers/query/PhabricatorWorkerTriggerQuery.php
+++ b/src/infrastructure/daemon/workers/query/PhabricatorWorkerTriggerQuery.php
@@ -59,7 +59,7 @@
    * triggers which have been scheduled to execute. You should not use this
    * ordering when querying for specific triggers, e.g. by ID or PHID.
    *
-   * @param const Result order.
+   * @param const $order Result order.
    * @return this
    */
   public function setOrder($order) {
diff --git a/src/infrastructure/daemon/workers/storage/PhabricatorWorkerTrigger.php b/src/infrastructure/daemon/workers/storage/PhabricatorWorkerTrigger.php
--- a/src/infrastructure/daemon/workers/storage/PhabricatorWorkerTrigger.php
+++ b/src/infrastructure/daemon/workers/storage/PhabricatorWorkerTrigger.php
@@ -67,9 +67,10 @@
    * is changed (usually because of an application edit). The `$is_reschedule`
    * parameter distinguishes between these cases.
    *
-   * @param int|null Epoch of the most recent successful event execution.
-   * @param bool `true` if we're trying to reschedule the event after
-   *   execution; `false` if this is in response to a trigger update.
+   * @param int|null $last_epoch Epoch of the most recent successful event
+   *   execution.
+   * @param bool $is_reschedule `true` if we're trying to reschedule the event
+   *   after execution; `false` if this is in response to a trigger update.
    * @return int|null Return an epoch to schedule the next event execution,
    *   or `null` to stop the event from executing again.
    */
@@ -81,10 +82,10 @@
   /**
    * Execute the event.
    *
-   * @param int|null Epoch of previous execution, or null if this is the first
-   *   execution.
-   * @param int Scheduled epoch of this execution. This may not be the same
-   *   as the current time.
+   * @param int|null $last_event Epoch of previous execution, or null if this
+   *   is the first execution.
+   * @param int $this_event Scheduled epoch of this execution. This may not be
+   *   the same as the current time.
    * @return void
    */
   public function executeTrigger($last_event, $this_event) {
diff --git a/src/infrastructure/diff/PhabricatorDifferenceEngine.php b/src/infrastructure/diff/PhabricatorDifferenceEngine.php
--- a/src/infrastructure/diff/PhabricatorDifferenceEngine.php
+++ b/src/infrastructure/diff/PhabricatorDifferenceEngine.php
@@ -21,7 +21,7 @@
   /**
    * Set the name to identify the old file with. Primarily cosmetic.
    *
-   * @param  string Old file name.
+   * @param  string $old_name Old file name.
    * @return this
    * @task config
    */
@@ -34,7 +34,7 @@
   /**
    * Set the name to identify the new file with. Primarily cosmetic.
    *
-   * @param  string New file name.
+   * @param  string $new_name New file name.
    * @return this
    * @task config
    */
@@ -62,8 +62,8 @@
    * @{method:generateChangesetFromFileContent}, but may be useful if you need
    * to use a custom parser configuration, as with Diffusion.
    *
-   * @param string Entire previous file content.
-   * @param string Entire current file content.
+   * @param string $old Entire previous file content.
+   * @param string $new Entire current file content.
    * @return string Raw diff between the two files.
    * @task diff
    */
@@ -132,8 +132,8 @@
    * principally useful because you can feed the output to
    * @{class:DifferentialChangesetParser} in order to render it.
    *
-   * @param string Entire previous file content.
-   * @param string Entire current file content.
+   * @param string $old Entire previous file content.
+   * @param string $new Entire current file content.
    * @return @{class:DifferentialChangeset} Synthetic changeset.
    * @task diff
    */
diff --git a/src/infrastructure/edges/editor/PhabricatorEdgeEditor.php b/src/infrastructure/edges/editor/PhabricatorEdgeEditor.php
--- a/src/infrastructure/edges/editor/PhabricatorEdgeEditor.php
+++ b/src/infrastructure/edges/editor/PhabricatorEdgeEditor.php
@@ -45,10 +45,10 @@
    *   - `inverse_data` Optional, data to write on the inverse edge. If not
    *     provided, `data` will be written.
    *
-   * @param phid  Source object PHID.
-   * @param const Edge type constant.
-   * @param phid  Destination object PHID.
-   * @param map   Options map (see documentation).
+   * @param phid  $src Source object PHID.
+   * @param const $type Edge type constant.
+   * @param phid  $dst Destination object PHID.
+   * @param map?  $options Options map (see documentation).
    * @return this
    *
    * @task edit
@@ -67,9 +67,9 @@
    * will be ignored. Edges are added after edges are removed, so the effect of
    * a remove plus an add is to overwrite.
    *
-   * @param phid  Source object PHID.
-   * @param const Edge type constant.
-   * @param phid  Destination object PHID.
+   * @param phid  $src Source object PHID.
+   * @param const $type Edge type constant.
+   * @param phid  $dst Destination object PHID.
    * @return this
    *
    * @task edit
diff --git a/src/infrastructure/edges/query/PhabricatorEdgeQuery.php b/src/infrastructure/edges/query/PhabricatorEdgeQuery.php
--- a/src/infrastructure/edges/query/PhabricatorEdgeQuery.php
+++ b/src/infrastructure/edges/query/PhabricatorEdgeQuery.php
@@ -40,7 +40,7 @@
    * Find edges originating at one or more source PHIDs. You MUST provide this
    * to execute an edge query.
    *
-   * @param list List of source PHIDs.
+   * @param list $source_phids List of source PHIDs.
    * @return this
    *
    * @task config
@@ -61,7 +61,7 @@
   /**
    * Find edges terminating at one or more destination PHIDs.
    *
-   * @param list List of destination PHIDs.
+   * @param list $dest_phids List of destination PHIDs.
    * @return this
    *
    */
@@ -74,7 +74,7 @@
   /**
    * Find edges of specific types.
    *
-   * @param list List of PhabricatorEdgeConfig type constants.
+   * @param list $types List of PhabricatorEdgeConfig type constants.
    * @return this
    *
    * @task config
@@ -88,7 +88,7 @@
   /**
    * Configure the order edge results are returned in.
    *
-   * @param const Order constant.
+   * @param const $order Order constant.
    * @return this
    *
    * @task config
@@ -102,7 +102,7 @@
   /**
    * When loading edges, also load edge data.
    *
-   * @param bool True to load edge data.
+   * @param bool $need True to load edge data.
    * @return this
    *
    * @task config
@@ -121,8 +121,8 @@
    * edge type. Equivalent to building a full query, but simplifies a common
    * use case.
    *
-   * @param phid  Source PHID.
-   * @param const Edge type.
+   * @param phid  $src_phid Source PHID.
+   * @param const $edge_type Edge type.
    * @return list<phid> List of destination PHIDs.
    */
   public static function loadDestinationPHIDs($src_phid, $edge_type) {
@@ -139,9 +139,9 @@
    * if the edge does not exist or does not have metadata. Builds
    * and immediately executes a full query.
    *
-   * @param phid  Source PHID.
-   * @param const Edge type.
-   * @param phid  Destination PHID.
+   * @param phid  $src_phid Source PHID.
+   * @param const $edge_type Edge type.
+   * @param phid  $dest_phid Destination PHID.
    * @return wild Edge annotation (or null).
    */
   public static function loadSingleEdgeData($src_phid, $edge_type, $dest_phid) {
@@ -256,8 +256,8 @@
    *     $object->attachHandles(array_select_keys($handles, $dst_phids));
    *   }
    *
-   * @param list? List of PHIDs to select, or empty to select all.
-   * @param list? List of edge types to select, or empty to select all.
+   * @param list? $src_phids List of PHIDs to select, or empty to select all.
+   * @param list? $types List of edge types to select, or empty to select all.
    * @return list<phid> List of matching destination PHIDs.
    */
   public function getDestinationPHIDs(
diff --git a/src/infrastructure/env/PhabricatorEnv.php b/src/infrastructure/env/PhabricatorEnv.php
--- a/src/infrastructure/env/PhabricatorEnv.php
+++ b/src/infrastructure/env/PhabricatorEnv.php
@@ -638,7 +638,7 @@
    * NOTE: This method is generally intended to reject URIs which it may be
    * unsafe to put in an "href" link attribute.
    *
-   * @param string URI to test.
+   * @param string $uri URI to test.
    * @return bool True if the URI identifies a web resource.
    * @task uri
    */
@@ -654,7 +654,7 @@
    * NOTE: This method is generally intended to reject URIs which it may be
    * unsafe to issue a "Location:" redirect to.
    *
-   * @param string URI to test.
+   * @param string $uri URI to test.
    * @return bool True if the URI identifies a local page.
    * @task uri
    */
@@ -696,7 +696,7 @@
   /**
    * Detect if a URI identifies some valid linkable remote resource.
    *
-   * @param string URI to test.
+   * @param string $uri URI to test.
    * @return bool True if a URI identifies a remote resource with an allowed
    *              protocol.
    * @task uri
@@ -718,7 +718,7 @@
    * A valid linkable remote resource can be safely linked or redirected to.
    * This is primarily a protocol whitelist check.
    *
-   * @param string URI to test.
+   * @param string $raw_uri URI to test.
    * @return void
    * @task uri
    */
@@ -758,8 +758,8 @@
   /**
    * Detect if a URI identifies a valid fetchable remote resource.
    *
-   * @param string URI to test.
-   * @param list<string> Allowed protocols.
+   * @param string $uri URI to test.
+   * @param list<string> $protocols Allowed protocols.
    * @return bool True if the URI is a valid fetchable remote resource.
    * @task uri
    */
@@ -781,8 +781,8 @@
    * originating on this server. This is a primarily an address check against
    * the outbound address blacklist.
    *
-   * @param string URI to test.
-   * @param list<string> Allowed protocols.
+   * @param string $raw_uri URI to test.
+   * @param list<string> $protocols Allowed protocols.
    * @return pair<string, string> Pre-resolved URI and domain.
    * @task uri
    */
@@ -853,7 +853,7 @@
   /**
    * Determine if an IP address is in the outbound address blacklist.
    *
-   * @param string IP address.
+   * @param string $address IP address.
    * @return bool True if the address is blacklisted.
    */
   public static function isBlacklistedOutboundAddress($address) {
diff --git a/src/infrastructure/env/PhabricatorScopedEnv.php b/src/infrastructure/env/PhabricatorScopedEnv.php
--- a/src/infrastructure/env/PhabricatorScopedEnv.php
+++ b/src/infrastructure/env/PhabricatorScopedEnv.php
@@ -17,8 +17,8 @@
   /**
    * Override a configuration key in this scope, setting it to a new value.
    *
-   * @param  string Key to override.
-   * @param  wild   New value.
+   * @param  string $key Key to override.
+   * @param  wild   $value New value.
    * @return this
    *
    * @task override
diff --git a/src/infrastructure/markup/PhabricatorMarkupEngine.php b/src/infrastructure/markup/PhabricatorMarkupEngine.php
--- a/src/infrastructure/markup/PhabricatorMarkupEngine.php
+++ b/src/infrastructure/markup/PhabricatorMarkupEngine.php
@@ -56,10 +56,11 @@
    * Convenience method for pushing a single object through the markup
    * pipeline.
    *
-   * @param PhabricatorMarkupInterface  The object to render.
-   * @param string                      The field to render.
-   * @param PhabricatorUser             User viewing the markup.
-   * @param object                      A context object for policy checks
+   * @param PhabricatorMarkupInterface  $object The object to render.
+   * @param string                      $field The field to render.
+   * @param PhabricatorUser             $viewer User viewing the markup.
+   * @param object?                     $context_object A context object for
+   *                                    policy checks.
    * @return string                     Marked up output.
    * @task markup
    */
@@ -81,8 +82,8 @@
    * Queue an object for markup generation when @{method:process} is
    * called. You can retrieve the output later with @{method:getOutput}.
    *
-   * @param PhabricatorMarkupInterface  The object to render.
-   * @param string                      The field to render.
+   * @param PhabricatorMarkupInterface  $object The object to render.
+   * @param string                      $field The field to render.
    * @return this
    * @task markup
    */
@@ -175,8 +176,8 @@
    * @{method:addObject}. Before you can call this method, you must call
    * @{method:process}.
    *
-   * @param PhabricatorMarkupInterface  The object to retrieve.
-   * @param string                      The field to retrieve.
+   * @param PhabricatorMarkupInterface  $object The object to retrieve.
+   * @param string                      $field The field to retrieve.
    * @return string                     Processed output.
    * @task markup
    */
@@ -191,10 +192,11 @@
   /**
    * Retrieve engine metadata for a given field.
    *
-   * @param PhabricatorMarkupInterface  The object to retrieve.
-   * @param string                      The field to retrieve.
-   * @param string                      The engine metadata field to retrieve.
-   * @param wild                        Optional default value.
+   * @param PhabricatorMarkupInterface  $object The object to retrieve.
+   * @param string                      $field The field to retrieve.
+   * @param string                      $metadata_key The engine metadata field
+   *                                    to retrieve.
+   * @param wild?                       $default Optional default value.
    * @task markup
    */
   public function getEngineMetadata(
@@ -316,7 +318,7 @@
   /**
    * Set the viewing user. Used to implement object permissions.
    *
-   * @param PhabricatorUser The viewing user.
+   * @param PhabricatorUser $viewer The viewing user.
    * @return this
    * @task markup
    */
@@ -328,7 +330,7 @@
   /**
    * Set the context object. Used to implement object permissions.
    *
-   * @param The object in which context this remarkup is used.
+   * @param $object The object in which context this remarkup is used.
    * @return this
    * @task markup
    */
@@ -670,7 +672,7 @@
    *
    * TODO: We could do a better job of this.
    *
-   * @param string  Remarkup corpus to summarize.
+   * @param string $corpus Remarkup corpus to summarize.
    * @return string Summarized corpus.
    */
   public static function summarize($corpus) {
diff --git a/src/infrastructure/markup/PhabricatorMarkupInterface.php b/src/infrastructure/markup/PhabricatorMarkupInterface.php
--- a/src/infrastructure/markup/PhabricatorMarkupInterface.php
+++ b/src/infrastructure/markup/PhabricatorMarkupInterface.php
@@ -28,7 +28,7 @@
    *
    *   "{$phid}:{$field}"
    *
-   * @param string Field name.
+   * @param string $field Field name.
    * @return string Cache key up to 125 characters.
    *
    * @task markup
@@ -39,7 +39,7 @@
   /**
    * Build the engine the field should use.
    *
-   * @param string Field name.
+   * @param string $field Field name.
    * @return PhutilRemarkupEngine Markup engine to use.
    * @task markup
    */
@@ -49,7 +49,7 @@
   /**
    * Return the contents of the specified field.
    *
-   * @param string Field name.
+   * @param string $field Field name.
    * @return string The raw markup contained in the field.
    * @task markup
    */
@@ -60,9 +60,9 @@
    * Callback for final postprocessing of output. Normally, you can return
    * the output unmodified.
    *
-   * @param string Field name.
-   * @param string The finalized output of the engine.
-   * @param string The engine which generated the output.
+   * @param string $field Field name.
+   * @param string $output The finalized output of the engine.
+   * @param string $engine The engine which generated the output.
    * @return string Final output.
    * @task markup
    */
diff --git a/src/infrastructure/markup/PhutilMarkupEngine.php b/src/infrastructure/markup/PhutilMarkupEngine.php
--- a/src/infrastructure/markup/PhutilMarkupEngine.php
+++ b/src/infrastructure/markup/PhutilMarkupEngine.php
@@ -8,8 +8,8 @@
    * documentation for specific rules and blocks for what options are available
    * for configuration.
    *
-   * @param   string  Key to set in the configuration dictionary.
-   * @param   string  Value to set.
+   * @param   string $key Key to set in the configuration dictionary.
+   * @param   string $value Value to set.
    * @return  this
    */
   abstract public function setConfig($key, $value);
@@ -21,8 +21,9 @@
    * text; consult the documentation for specific rules and blocks to see what
    * metadata may be available in your configuration.
    *
-   * @param   string  Key to retrieve from metadata.
-   * @param   mixed   Default value to return if the key is not available.
+   * @param   string  $key Key to retrieve from metadata.
+   * @param   mixed?  $default Default value to return if the key is not
+   *   available.
    * @return  mixed   Metadata property, or default value.
    */
   abstract public function getTextMetadata($key, $default = null);
diff --git a/src/infrastructure/markup/blockrule/PhutilRemarkupCodeBlockRule.php b/src/infrastructure/markup/blockrule/PhutilRemarkupCodeBlockRule.php
--- a/src/infrastructure/markup/blockrule/PhutilRemarkupCodeBlockRule.php
+++ b/src/infrastructure/markup/blockrule/PhutilRemarkupCodeBlockRule.php
@@ -350,7 +350,7 @@
 
   /**
    * Get the extension from a filename.
-   * @param  string "/path/to/something.name"
+   * @param  string $name "/path/to/something.name"
    * @return null|string ".name"
    */
   private function guessFilenameExtension($name) {
diff --git a/src/infrastructure/markup/markuprule/PhutilRemarkupRule.php b/src/infrastructure/markup/markuprule/PhutilRemarkupRule.php
--- a/src/infrastructure/markup/markuprule/PhutilRemarkupRule.php
+++ b/src/infrastructure/markup/markuprule/PhutilRemarkupRule.php
@@ -20,9 +20,10 @@
 
   /**
    * Check input whether to apply RemarkupRule. If true, apply formatting.
-   * @param  string|PhutilSafeHTML String to check and potentially format.
+   * @param  string|PhutilSafeHTML $text String to check and potentially
+   *   format.
    * @return string|PhutilSafeHTML Unchanged input if no match, or input after
-   * matching the formatting rule and applying the formatting.
+   *   matching the formatting rule and applying the formatting.
    */
   abstract public function apply($text);
 
@@ -59,9 +60,9 @@
    * This method acts as @{function:phutil_tag}, but checks attributes before
    * using them.
    *
-   * @param   string              Tag name.
-   * @param   dict<string, wild>  Tag attributes.
-   * @param   wild                Tag content.
+   * @param   string              $name Tag name.
+   * @param   dict<string, wild>  $attrs Tag attributes.
+   * @param   wild?               $content Tag content.
    * @return  PhutilSafeHTML      Tag object.
    */
   protected function newTag($name, array $attrs, $content = null) {
@@ -85,7 +86,7 @@
    * Normally, you can call @{method:newTag} rather than calling this method
    * directly. @{method:newTag} will check attributes for you.
    *
-   * @param   wild    Ostensibly flat text.
+   * @param   wild    $text Ostensibly flat text.
    * @return  string  Flat text.
    */
   protected function assertFlatText($text) {
@@ -104,7 +105,7 @@
   /**
    * Check whether text is flat (contains no replacement tokens) or not.
    *
-   * @param   wild  Ostensibly flat text.
+   * @param   wild  $text Ostensibly flat text.
    * @return  bool  True if the text is flat.
    */
   protected function isFlatText($text) {
diff --git a/src/infrastructure/markup/render.php b/src/infrastructure/markup/render.php
--- a/src/infrastructure/markup/render.php
+++ b/src/infrastructure/markup/render.php
@@ -16,9 +16,9 @@
  * trusted blindly, and not escaped. You should not pass user data in these
  * parameters.
  *
- * @param string The name of the tag, like `a` or `div`.
- * @param map<string, string> A map of tag attributes.
- * @param wild Content to put in the tag.
+ * @param string $tag The name of the tag, like `a` or `div`.
+ * @param map<string, string>? $attributes A map of tag attributes.
+ * @param wild? $content Content to put in the tag.
  * @return PhutilSafeHTML Tag object.
  */
 function phutil_tag($tag, array $attributes = array(), $content = null) {
diff --git a/src/infrastructure/markup/rule/PhabricatorObjectRemarkupRule.php b/src/infrastructure/markup/rule/PhabricatorObjectRemarkupRule.php
--- a/src/infrastructure/markup/rule/PhabricatorObjectRemarkupRule.php
+++ b/src/infrastructure/markup/rule/PhabricatorObjectRemarkupRule.php
@@ -258,7 +258,7 @@
    * This is intended to make it easy to write unit tests for object remarkup
    * rules. Production code is not normally expected to call this method.
    *
-   * @param   string  Text to match rules against.
+   * @param   string  $text Text to match rules against.
    * @return  wild    Matches, suitable for writing unit tests against.
    */
   public function extractReferences($text) {
diff --git a/src/infrastructure/parser/PhutilURIHelper.php b/src/infrastructure/parser/PhutilURIHelper.php
--- a/src/infrastructure/parser/PhutilURIHelper.php
+++ b/src/infrastructure/parser/PhutilURIHelper.php
@@ -19,7 +19,7 @@
   private $phutilUri;
 
   /**
-   * @param string|PhutilURI
+   * @param string|PhutilURI $uri
    */
   public function __construct($uri) {
 
diff --git a/src/infrastructure/query/policy/PhabricatorCursorPagedPolicyAwareQuery.php b/src/infrastructure/query/policy/PhabricatorCursorPagedPolicyAwareQuery.php
--- a/src/infrastructure/query/policy/PhabricatorCursorPagedPolicyAwareQuery.php
+++ b/src/infrastructure/query/policy/PhabricatorCursorPagedPolicyAwareQuery.php
@@ -718,9 +718,9 @@
    *
    * This method will then return a composable clause for inclusion in WHERE.
    *
-   * @param AphrontDatabaseConnection Connection query will execute on.
-   * @param list<map> Column description dictionaries.
-   * @param map Additional construction options.
+   * @param AphrontDatabaseConnection $conn Connection query will execute on.
+   * @param list<map> $columns Column description dictionaries.
+   * @param map $options Additional construction options.
    * @return string Query clause.
    * @task paging
    */
@@ -884,7 +884,7 @@
    * across individual orderable columns. This offers greater control but is
    * also more involved.
    *
-   * @param string Key of a builtin order supported by this query.
+   * @param string $order Key of a builtin order supported by this query.
    * @return this
    * @task order
    */
@@ -917,7 +917,8 @@
    * This is a high-level method which works alongside @{method:setOrder}. For
    * lower-level control over order vectors, use @{method:setOrderVector}.
    *
-   * @param PhabricatorQueryOrderVector|list<string> List of order keys.
+   * @param PhabricatorQueryOrderVector|list<string> $vector List of order
+   *   keys.
    * @return this
    * @task order
    */
@@ -1041,7 +1042,8 @@
    * To set an order vector, specify a list of order keys as provided by
    * @{method:getOrderableColumns}.
    *
-   * @param PhabricatorQueryOrderVector|list<string> List of order keys.
+   * @param PhabricatorQueryOrderVector|list<string> $vector List of order
+   *   keys.
    * @return this
    * @task order
    */
@@ -1353,8 +1355,9 @@
    *   - Find users with shirt sizes "X" or "XL".
    *   - Find shoes with size "13".
    *
-   * @param PhabricatorCustomFieldIndexStorage Table where the index is stored.
-   * @param string|list<string> One or more values to filter by.
+   * @param PhabricatorCustomFieldIndexStorage $index Table where the index is
+   *   stored.
+   * @param string|list<string> $value One or more values to filter by.
    * @return this
    * @task appsearch
    */
@@ -1403,9 +1406,10 @@
    * `5` will match fields with values `3`, `4`, or `5`. Providing `null` for
    * either end of the range will leave that end of the constraint open.
    *
-   * @param PhabricatorCustomFieldIndexStorage Table where the index is stored.
-   * @param int|null Minimum permissible value, inclusive.
-   * @param int|null Maximum permissible value, inclusive.
+   * @param PhabricatorCustomFieldIndexStorage $index Table where the index is
+   *   stored.
+   * @param int|null $min Minimum permissible value, inclusive.
+   * @param int|null $max Maximum permissible value, inclusive.
    * @return this
    * @task appsearch
    */
@@ -1449,7 +1453,7 @@
    * See @{method:getPrimaryTableAlias} if the column needs to be qualified with
    * a table alias.
    *
-   * @param AphrontDatabaseConnection Connection executing queries.
+   * @param AphrontDatabaseConnection $conn Connection executing queries.
    * @return PhutilQueryString Column name.
    * @task appsearch
    */
@@ -1509,7 +1513,7 @@
   /**
    * Construct a GROUP BY clause appropriate for ApplicationSearch constraints.
    *
-   * @param AphrontDatabaseConnection Connection executing the query.
+   * @param AphrontDatabaseConnection $conn Connection executing the query.
    * @return string Group clause.
    * @task appsearch
    */
@@ -1531,7 +1535,7 @@
    * Construct a JOIN clause appropriate for applying ApplicationSearch
    * constraints.
    *
-   * @param AphrontDatabaseConnection Connection executing the query.
+   * @param AphrontDatabaseConnection $conn Connection executing the query.
    * @return string Join clause.
    * @task appsearch
    */
@@ -1653,7 +1657,7 @@
    * Construct a WHERE clause appropriate for applying ApplicationSearch
    * constraints.
    *
-   * @param AphrontDatabaseConnection Connection executing the query.
+   * @param AphrontDatabaseConnection $conn Connection executing the query.
    * @return list<string> Where clause parts.
    * @task appsearch
    */
@@ -2583,9 +2587,9 @@
    * Convenience method for specifying edge logic constraints with a list of
    * PHIDs.
    *
-   * @param const Edge constant.
-   * @param const Constraint operator.
-   * @param list<phid> List of PHIDs.
+   * @param const $edge_type Edge constant.
+   * @param const $operator Constraint operator.
+   * @param list<phid> $phids List of PHIDs.
    * @return this
    * @task edgelogic
    */
@@ -3091,7 +3095,7 @@
    * Queries are always constrained to include only results from spaces the
    * viewer has access to.
    *
-   * @param list<phid|null>
+   * @param list<phid|null> $space_phids
    * @task spaces
    */
   public function withSpacePHIDs(array $space_phids) {
@@ -3135,7 +3139,7 @@
    * viewer has access to see with any explicit constraint on spaces added by
    * @{method:withSpacePHIDs}.
    *
-   * @param AphrontDatabaseConnection Database connection.
+   * @param AphrontDatabaseConnection $conn Database connection.
    * @return string Part of a WHERE clause.
    * @task spaces
    */
diff --git a/src/infrastructure/query/policy/PhabricatorPolicyAwareQuery.php b/src/infrastructure/query/policy/PhabricatorPolicyAwareQuery.php
--- a/src/infrastructure/query/policy/PhabricatorPolicyAwareQuery.php
+++ b/src/infrastructure/query/policy/PhabricatorPolicyAwareQuery.php
@@ -57,7 +57,7 @@
    * according to the viewer's capabilities. You must set a viewer to execute
    * a policy query.
    *
-   * @param PhabricatorUser The viewing user.
+   * @param PhabricatorUser $viewer The viewing user.
    * @return this
    * @task config
    */
@@ -473,8 +473,8 @@
    * automatically populated as a side effect of objects surviving policy
    * filtering.
    *
-   * @param map<phid, PhabricatorPolicyInterface> Objects to add to the query
-   *   workspace.
+   * @param map<phid, PhabricatorPolicyInterface> $objects Objects to add to
+   *   the query workspace.
    * @return this
    * @task workspace
    */
@@ -506,7 +506,7 @@
    * searches both the current query's workspace and the workspaces of parent
    * queries.
    *
-   * @param list<phid> List of PHIDs to retrieve.
+   * @param list<phid> $phids List of PHIDs to retrieve.
    * @return this
    * @task workspace
    */
@@ -536,7 +536,7 @@
    * PHIDs which are "in flight" are actively being queried for. Using this
    * list can prevent infinite query loops by aborting queries which cycle.
    *
-   * @param list<phid> List of PHIDs which are now in flight.
+   * @param list<phid> $phids List of PHIDs which are now in flight.
    * @return this
    */
   public function putPHIDsInFlight(array $phids) {
@@ -606,7 +606,7 @@
    * return new results. Generally, you should adjust a cursor position based
    * on the provided result page.
    *
-   * @param list<PhabricatorPolicyInterface> The current page of results.
+   * @param list<PhabricatorPolicyInterface> $page The current page of results.
    * @return void
    * @task policyimpl
    */
@@ -627,7 +627,7 @@
    * This method will only be called if data is available. Implementations
    * do not need to handle the case of no results specially.
    *
-   * @param   list<wild>  Results from `loadPage()`.
+   * @param   list<wild>  $page Results from `loadPage()`.
    * @return  list<PhabricatorPolicyInterface> Objects for policy filtering.
    * @task policyimpl
    */
@@ -650,7 +650,7 @@
    * This method will only be called if data is available. Implementations do
    * not need to handle the case of no results specially.
    *
-   * @param list<wild> Results from @{method:willFilterPage()}.
+   * @param list<wild> $page Results from @{method:willFilterPage()}.
    * @return list<PhabricatorPolicyInterface> Objects after additional
    *   non-policy processing.
    */
@@ -665,8 +665,8 @@
    * filtered for policy reasons. The query should remove them from any cached
    * or partial result sets.
    *
-   * @param list<wild>  List of objects that should not be returned by alternate
-   *                    result mechanisms.
+   * @param list<wild>  $results List of objects that should not be returned by
+   *                    alternate result mechanisms.
    * @return void
    * @task policyimpl
    */
@@ -680,7 +680,7 @@
    * used by @{class:PhabricatorCursorPagedPolicyAwareQuery} to reverse results
    * that are queried during reverse paging.
    *
-   * @param   list<PhabricatorPolicyInterface> Query results.
+   * @param   list<PhabricatorPolicyInterface> $results Query results.
    * @return  list<PhabricatorPolicyInterface> Final results.
    * @task policyimpl
    */
diff --git a/src/infrastructure/storage/lisk/LiskDAO.php b/src/infrastructure/storage/lisk/LiskDAO.php
--- a/src/infrastructure/storage/lisk/LiskDAO.php
+++ b/src/infrastructure/storage/lisk/LiskDAO.php
@@ -221,7 +221,8 @@
    * return a new connection. Lisk handles connection caching and management;
    * do not perform caching deeper in the stack.
    *
-   * @param string Mode, either 'r' (reading) or 'w' (reading and writing).
+   * @param string $mode Mode, either 'r' (reading) or 'w' (reading and
+   *   writing).
    * @return AphrontDatabaseConnection New database connection.
    * @task conn
    */
@@ -245,7 +246,7 @@
   /**
    * Get an existing, cached connection for this object.
    *
-   * @param mode Connection mode.
+   * @param mode $mode Connection mode.
    * @return AphrontDatabaseConnection|null  Connection, if it exists in cache.
    * @task conn
    */
@@ -261,8 +262,9 @@
   /**
    * Store a connection in the connection cache.
    *
-   * @param mode Connection mode.
-   * @param AphrontDatabaseConnection Connection to cache.
+   * @param mode $mode Connection mode.
+   * @param AphrontDatabaseConnection $connection Connection to cache.
+   * @param bool? $force_unique
    * @return this
    * @task conn
    */
@@ -291,7 +293,8 @@
    * This overrides all connection management and forces the object to use
    * a specific connection when interacting with the database.
    *
-   * @param AphrontDatabaseConnection Connection to force this object to use.
+   * @param AphrontDatabaseConnection $connection Connection to force this
+   *   object to use.
    * @task conn
    */
   public function setForcedConnection(AphrontDatabaseConnection $connection) {
@@ -397,12 +400,12 @@
 
 
   /**
-   *  Determine the setting of a configuration option for this class of objects.
+   * Determine the setting of a configuration option for this class of objects.
    *
-   *  @param  const       Option name, one of the CONFIG_* constants.
-   *  @return mixed       Option value, if configured (null if unavailable).
+   * @param  const  $option_name Option name, one of the CONFIG_* constants.
+   * @return mixed  Option value, if configured (null if unavailable).
    *
-   *  @task   config
+   * @task   config
    */
   public function getConfigOption($option_name) {
     $options = $this->getLiskMetadata('config');
@@ -426,7 +429,7 @@
    *
    *   $dog = id(new Dog())->load($dog_id);
    *
-   * @param  int       Numeric ID identifying the object to load.
+   * @param  int       $id Numeric ID identifying the object to load.
    * @return obj|null  Identified object, or null if it does not exist.
    *
    * @task   load
@@ -468,7 +471,7 @@
    *
    * The pattern and arguments are as per queryfx().
    *
-   * @param  string  queryfx()-style SQL WHERE clause.
+   * @param  string  $pattern queryfx()-style SQL WHERE clause.
    * @param  ...     Zero or more conversions.
    * @return dict    Dictionary of matching objects, keyed on ID.
    *
@@ -489,7 +492,7 @@
    * query. See loadAllWhere(). This method is similar, but returns a single
    * result instead of a list.
    *
-   * @param  string    queryfx()-style SQL WHERE clause.
+   * @param  string    $pattern queryfx()-style SQL WHERE clause.
    * @param  ...       Zero or more conversions.
    * @return obj|null  Matching object, or null if no object matches.
    *
@@ -574,8 +577,8 @@
    * convenient to pull data from elsewhere directly (e.g., a complicated
    * join via @{method:queryData}) and then load from an array representation.
    *
-   * @param  dict  Dictionary of properties, which should be equivalent to
-   *               selecting a row from the table or calling
+   * @param  dict  $row Dictionary of properties, which should be equivalent
+   *               to selecting a row from the table or calling
    *               @{method:getProperties}.
    * @return this
    *
@@ -649,7 +652,7 @@
    *
    * This is a lot messier than @{method:loadAllWhere}, but more flexible.
    *
-   * @param  list  List of property dictionaries.
+   * @param  list  $rows List of property dictionaries.
    * @return dict  List of constructed objects, keyed on ID.
    *
    * @task   load
@@ -690,7 +693,7 @@
    * Set unique ID identifying this object. You normally don't need to call this
    * method unless with `IDS_MANUAL`.
    *
-   * @param  mixed   Unique ID.
+   * @param  mixed   $id Unique ID.
    * @return this
    * @task   save
    */
@@ -723,7 +726,7 @@
   /**
    * Test if a property exists.
    *
-   * @param   string    Property name.
+   * @param   string    $property Property name.
    * @return  bool      True if the property exists.
    * @task info
    */
@@ -798,9 +801,9 @@
   /**
    * Get or build the database connection for this object.
    *
-   * @param  string 'r' for read, 'w' for read/write.
-   * @param  bool True to force a new connection. The connection will not
-   *              be retrieved from or saved into the connection cache.
+   * @param  string $mode 'r' for read, 'w' for read/write.
+   * @param  bool? $force_new True to force a new connection. The connection
+   *   will not be retrieved from or saved into the connection cache.
    * @return AphrontDatabaseConnection   Lisk connection object.
    *
    * @task   info
@@ -1038,7 +1041,8 @@
   /**
    * Internal implementation of INSERT and REPLACE.
    *
-   * @param  const   Either "INSERT" or "REPLACE", to force the desired mode.
+   * @param  const $mode Either "INSERT" or "REPLACE", to force the desired
+   *   mode.
    * @return this
    *
    * @task   save
@@ -1272,7 +1276,7 @@
    * Reads the value from a field. Override this method for custom behavior
    * of @{method:getField} instead of overriding getField directly.
    *
-   * @param  string  Canonical field name
+   * @param  string  $field Canonical field name
    * @return mixed   Value of the field
    *
    * @task hook
@@ -1288,8 +1292,8 @@
    * Writes a value to a field. Override this method for custom behavior of
    * setField($value) instead of overriding setField directly.
    *
-   * @param  string  Canonical field name
-   * @param  mixed   Value to write
+   * @param  string  $field Canonical field name
+   * @param  mixed   $value Value to write
    *
    * @task hook
    */
@@ -1476,7 +1480,8 @@
    * Long-running processes can use this method to clean up connections which
    * have not been used recently.
    *
-   * @param int Close connections with no activity for this many seconds.
+   * @param int $idle_window Close connections with no activity for this many
+   *   seconds.
    * @return void
    */
   public static function closeInactiveConnections($idle_window) {
@@ -1576,8 +1581,8 @@
   /**
    * Black magic. Builds implied get*() and set*() for all properties.
    *
-   * @param  string  Method name.
-   * @param  list    Argument vector.
+   * @param  string  $method Method name.
+   * @param  list    $args Argument vector.
    * @return mixed   get*() methods return the property value. set*() methods
    *                 return $this.
    * @task   util
@@ -1652,8 +1657,10 @@
   /**
    * Increments a named counter and returns the next value.
    *
-   * @param   AphrontDatabaseConnection   Database where the counter resides.
-   * @param   string                      Counter name to create or increment.
+   * @param   AphrontDatabaseConnection   $conn_w Database where the counter
+   *                                      resides.
+   * @param   string                      $counter_name Counter name to create
+   *                                      or increment.
    * @return  int                         Next counter value.
    *
    * @task util
@@ -1686,8 +1693,9 @@
   /**
    * Returns the current value of a named counter.
    *
-   * @param AphrontDatabaseConnection Database where the counter resides.
-   * @param string Counter name to read.
+   * @param AphrontDatabaseConnection $conn_r Database where the counter
+   *   resides.
+   * @param string $counter_name Counter name to read.
    * @return int|null Current value, or `null` if the counter does not exist.
    *
    * @task util
@@ -1714,8 +1722,10 @@
    *
    * If the counter does not exist, it is created.
    *
-   * @param AphrontDatabaseConnection Database where the counter resides.
-   * @param string Counter name to create or overwrite.
+   * @param AphrontDatabaseConnection $conn_w Database where the counter
+   *   resides.
+   * @param string $counter_name Counter name to create or overwrite.
+   * @param int $counter_value
    * @return void
    *
    * @task util
diff --git a/src/infrastructure/util/PhabricatorGlobalLock.php b/src/infrastructure/util/PhabricatorGlobalLock.php
--- a/src/infrastructure/util/PhabricatorGlobalLock.php
+++ b/src/infrastructure/util/PhabricatorGlobalLock.php
@@ -88,7 +88,7 @@
    * (somewhat arbitrarily). In most cases this is fine, but this method can
    * be used to lock on a specific connection.
    *
-   * @param  AphrontDatabaseConnection
+   * @param  AphrontDatabaseConnection $conn
    * @return this
    */
   public function setExternalConnection(AphrontDatabaseConnection $conn) {
diff --git a/src/infrastructure/util/PhabricatorHash.php b/src/infrastructure/util/PhabricatorHash.php
--- a/src/infrastructure/util/PhabricatorHash.php
+++ b/src/infrastructure/util/PhabricatorHash.php
@@ -11,7 +11,8 @@
    * Because a SHA1 collision is now known, this method should be considered
    * weak. Callers should prefer @{method:digestWithNamedKey}.
    *
-   * @param   string  Input string.
+   * @param   string  $string Input string.
+   * @param   string? $key
    * @return  string  32-byte hexadecimal SHA1+HMAC hash.
    */
   public static function weakDigest($string, $key = null) {
@@ -38,7 +39,7 @@
    * This method emphasizes compactness, and should not be used for security
    * related hashing (for general purpose hashing, see @{method:digest}).
    *
-   * @param   string  Input string.
+   * @param   string  $string Input string.
    * @return  string  12-byte, case-sensitive, mostly-alphanumeric hash of
    *                  the string.
    */
@@ -72,7 +73,7 @@
    * much stuff we're breaking by switching to it. For additional discussion,
    * see T13045.
    *
-   * @param   string  Input string.
+   * @param   string  $string Input string.
    * @return  string  12-byte, case-sensitive, purely-alphanumeric hash of
    *                  the string.
    */
@@ -149,8 +150,8 @@
    * maintaining a high degree of collision resistance and a moderate degree
    * of human readability.
    *
-   * @param string The string to shorten.
-   * @param int Maximum length of the result.
+   * @param string $string The string to shorten.
+   * @param int $length Maximum length of the result.
    * @return string String shortened in a collision-resistant way.
    */
   public static function digestToLength($string, $length) {
diff --git a/src/infrastructure/util/password/PhabricatorPasswordHasher.php b/src/infrastructure/util/password/PhabricatorPasswordHasher.php
--- a/src/infrastructure/util/password/PhabricatorPasswordHasher.php
+++ b/src/infrastructure/util/password/PhabricatorPasswordHasher.php
@@ -101,7 +101,7 @@
   /**
    * Produce a password hash.
    *
-   * @param   PhutilOpaqueEnvelope  Text to be hashed.
+   * @param   PhutilOpaqueEnvelope  $envelope Text to be hashed.
    * @return  PhutilOpaqueEnvelope  Hashed text.
    * @task hasher
    */
@@ -114,8 +114,8 @@
    * The default implementation checks for equality; if a hasher embeds salt in
    * hashes it should override this method and perform a salt-aware comparison.
    *
-   * @param   PhutilOpaqueEnvelope  Password to compare.
-   * @param   PhutilOpaqueEnvelope  Bare password hash.
+   * @param   PhutilOpaqueEnvelope  $password Password to compare.
+   * @param   PhutilOpaqueEnvelope  $hash Bare password hash.
    * @return  bool                  True if the passwords match.
    * @task hasher
    */
@@ -137,7 +137,7 @@
    * have (for example) an internal cost function may be able to upgrade an
    * existing hash to a stronger one with a higher cost.
    *
-   * @param PhutilOpaqueEnvelope  Bare hash.
+   * @param PhutilOpaqueEnvelope  $hash Bare hash.
    * @return bool                 True if the hash can be upgraded without
    *                              changing the algorithm (for example, to a
    *                              higher cost).
@@ -154,7 +154,7 @@
   /**
    * Get the hash of a password for storage.
    *
-   * @param   PhutilOpaqueEnvelope  Password text.
+   * @param   PhutilOpaqueEnvelope  $envelope Password text.
    * @return  PhutilOpaqueEnvelope  Hashed text.
    * @task hashing
    */
@@ -349,7 +349,7 @@
   /**
    * Generate a new hash for a password, using the best available hasher.
    *
-   * @param   PhutilOpaqueEnvelope  Password to hash.
+   * @param   PhutilOpaqueEnvelope  $password Password to hash.
    * @return  PhutilOpaqueEnvelope  Hashed password, using best available
    *                                hasher.
    * @task hashing
@@ -364,8 +364,8 @@
   /**
    * Compare a password to a stored hash.
    *
-   * @param   PhutilOpaqueEnvelope  Password to compare.
-   * @param   PhutilOpaqueEnvelope  Stored password hash.
+   * @param   PhutilOpaqueEnvelope  $password Password to compare.
+   * @param   PhutilOpaqueEnvelope  $hash Stored password hash.
    * @return  bool                  True if the passwords match.
    * @task hashing
    */
@@ -383,7 +383,7 @@
   /**
    * Get the human-readable algorithm name for a given hash.
    *
-   * @param   PhutilOpaqueEnvelope  Storage hash.
+   * @param   PhutilOpaqueEnvelope  $hash Storage hash.
    * @return  string                Human-readable algorithm name.
    */
   public static function getCurrentAlgorithmName(PhutilOpaqueEnvelope $hash) {
diff --git a/src/view/AphrontView.php b/src/view/AphrontView.php
--- a/src/view/AphrontView.php
+++ b/src/view/AphrontView.php
@@ -16,7 +16,7 @@
   /**
    * Set the user viewing this element.
    *
-   * @param PhabricatorUser Viewing user.
+   * @param PhabricatorUser $viewer Viewing user.
    * @return this
    */
   public function setViewer(PhabricatorUser $viewer) {
@@ -100,7 +100,7 @@
    * This method will only work if the view supports children, which is
    * determined by @{method:canAppendChild}.
    *
-   * @param  wild   Something renderable.
+   * @param  wild  $child Something renderable.
    * @return this
    */
   final public function appendChild($child) {
@@ -152,7 +152,7 @@
    * NOTE: Because View children are not rendered, a View which renders down
    * to nothing will not be reduced by this method.
    *
-   * @param   list<wild>  Renderable children.
+   * @param   list<wild>  $children Renderable children.
    * @return  list<wild>  Reduced list of children.
    * @task children
    */
diff --git a/src/view/control/AphrontTableView.php b/src/view/control/AphrontTableView.php
--- a/src/view/control/AphrontTableView.php
+++ b/src/view/control/AphrontTableView.php
@@ -105,7 +105,7 @@
    *
    *   list($sort, $reverse) = AphrontTableView::parseSortParam($sort_param);
    *
-   * @param string  Sort request parameter.
+   * @param string  $sort Sort request parameter.
    * @return pair   Sort value, sort direction.
    */
   public static function parseSort($sort) {
diff --git a/src/view/form/AphrontFormView.php b/src/view/form/AphrontFormView.php
--- a/src/view/form/AphrontFormView.php
+++ b/src/view/form/AphrontFormView.php
@@ -120,7 +120,7 @@
    * controls. It will propagate some information from the form to the
    * control to simplify rendering.
    *
-   * @param AphrontFormControl Control to append.
+   * @param AphrontFormControl $control Control to append.
    * @return this
    */
   public function appendControl(AphrontFormControl $control) {
diff --git a/src/view/form/control/AphrontFormControl.php b/src/view/form/control/AphrontFormControl.php
--- a/src/view/form/control/AphrontFormControl.php
+++ b/src/view/form/control/AphrontFormControl.php
@@ -59,7 +59,7 @@
   /**
    * Set the Caption
    * The Caption shows a tip usually nearby the related input field.
-   * @param string|PhutilSafeHTML|null
+   * @param string|PhutilSafeHTML|null $caption
    * @return self
    */
   public function setCaption($caption) {
diff --git a/src/view/page/PhabricatorStandardPageView.php b/src/view/page/PhabricatorStandardPageView.php
--- a/src/view/page/PhabricatorStandardPageView.php
+++ b/src/view/page/PhabricatorStandardPageView.php
@@ -379,7 +379,7 @@
   /**
    * Insert a HTML element into <head> of the page to render.
    *
-   * @param PhutilSafeHTML HTML header to add
+   * @param PhutilSafeHTML $html HTML header to add
    */
   public function addHeadItem($html) {
     if ($html instanceof PhutilSafeHTML) {
diff --git a/src/view/phui/PHUIBoxView.php b/src/view/phui/PHUIBoxView.php
--- a/src/view/phui/PHUIBoxView.php
+++ b/src/view/phui/PHUIBoxView.php
@@ -35,7 +35,8 @@
    * Render PHUIBoxView as a <details> instead of a <div> HTML tag.
    * To be used for collapse/expand in combination with PHUIHeaderView.
    *
-   * @param bool True to wrap in <summary> instead of <div> HTML tag.
+   * @param bool $collapsible True to wrap in <summary> instead of <div> HTML
+   *             tag.
    */
   public function setCollapsible($collapsible) {
     $this->collapsible = $collapsible;
diff --git a/src/view/phui/PHUICrumbView.php b/src/view/phui/PHUICrumbView.php
--- a/src/view/phui/PHUICrumbView.php
+++ b/src/view/phui/PHUICrumbView.php
@@ -23,7 +23,7 @@
    * Make this crumb always visible, even on devices where it would normally
    * be hidden.
    *
-   * @param bool True to make the crumb always visible.
+   * @param bool $always_visible True to make the crumb always visible.
    * @return this
    */
   public function setAlwaysVisible($always_visible) {
diff --git a/src/view/phui/PHUICrumbsView.php b/src/view/phui/PHUICrumbsView.php
--- a/src/view/phui/PHUICrumbsView.php
+++ b/src/view/phui/PHUICrumbsView.php
@@ -15,8 +15,8 @@
    * Convenience method for adding a simple crumb with just text, or text and
    * a link.
    *
-   * @param string  Text of the crumb.
-   * @param string? Optional href for the crumb.
+   * @param string  $text Text of the crumb.
+   * @param string? $href Optional href for the crumb.
    * @return this
    */
   public function addTextCrumb($text, $href = null) {
diff --git a/src/view/phui/PHUIHeaderView.php b/src/view/phui/PHUIHeaderView.php
--- a/src/view/phui/PHUIHeaderView.php
+++ b/src/view/phui/PHUIHeaderView.php
@@ -95,7 +95,8 @@
    * Render PHUIHeaderView as a <summary> instead of a <div> HTML tag.
    * To be used for collapse/expand in combination with PHUIBoxView.
    *
-   * @param bool True to wrap in <summary> instead of <div> HTML tag.
+   * @param bool $collapsible True to wrap in <summary> instead of <div> HTML
+   *   tag.
    */
   public function setCollapsible($collapsible) {
     $this->collapsible = $collapsible;
diff --git a/src/view/phui/PHUIPagerView.php b/src/view/phui/PHUIPagerView.php
--- a/src/view/phui/PHUIPagerView.php
+++ b/src/view/phui/PHUIPagerView.php
@@ -95,7 +95,7 @@
    *      $pager->getPageSize() + 1);
    *    $results = $pager->sliceResults($results);
    *
-   * @param   list  Result array.
+   * @param   list  $results Result array.
    * @return  list  One page of results.
    */
   public function sliceResults(array $results) {
diff --git a/src/view/viewutils.php b/src/view/viewutils.php
--- a/src/view/viewutils.php
+++ b/src/view/viewutils.php
@@ -104,9 +104,9 @@
  * @{function:phabricator_date}, @{function:phabricator_time}, or
  * @{function:phabricator_datetime}.
  *
- * @param int Unix epoch timestamp.
- * @param PhabricatorUser User viewing the timestamp.
- * @param string Date format, as per DateTime class.
+ * @param int $epoch Unix epoch timestamp.
+ * @param PhabricatorUser $user User viewing the timestamp.
+ * @param string $format Date format, as per DateTime class.
  * @return string Formatted, local date/time.
  */
 function phabricator_format_local_time($epoch, $user, $format) {
diff --git a/support/startup/PhabricatorClientLimit.php b/support/startup/PhabricatorClientLimit.php
--- a/support/startup/PhabricatorClientLimit.php
+++ b/support/startup/PhabricatorClientLimit.php
@@ -170,7 +170,7 @@
   /**
    * Get the APC key for a given bucket.
    *
-   * @param int Bucket to get the key for.
+   * @param int $bucket_id Bucket to get the key for.
    * @return string APC key for the bucket.
    */
   private function getBucketCacheKey($bucket_id) {
@@ -182,9 +182,8 @@
   /**
    * Add points to the rate limit score for some client.
    *
-   * @param string  Some key which identifies the client making the request.
-   * @param float   The cost for this request; more points pushes them toward
-   *                the limit faster.
+   * @param float   $score The cost for this request; more points pushes them
+   *                toward the limit faster.
    * @return this
    */
   private function addScore($score) {
diff --git a/support/startup/PhabricatorStartup.php b/support/startup/PhabricatorStartup.php
--- a/support/startup/PhabricatorStartup.php
+++ b/support/startup/PhabricatorStartup.php
@@ -112,7 +112,7 @@
 
 
   /**
-   * @param float Request start time, from `microtime(true)`.
+   * @param float $start_time Request start time, from `microtime(true)`.
    * @task hook
    */
   public static function didStartup($start_time) {
@@ -255,7 +255,7 @@
    * The limit is implemented with a tick function, so enabling it implies
    * some accounting overhead.
    *
-   * @param int Time limit in seconds.
+   * @param int $limit Time limit in seconds.
    * @return void
    */
   public static function setDebugTimeLimit($limit) {
@@ -312,11 +312,12 @@
    * Fatal the request completely in response to an exception, sending a plain
    * text message to the client. Calls @{method:didFatal} internally.
    *
-   * @param   string    Brief description of the exception context, like
+   * @param   string    $note Brief description of the exception context, like
    *                    `"Rendering Exception"`.
-   * @param   Throwable The exception itself.
-   * @param   bool      True if it's okay to show the exception's stack trace
-   *                    to the user. The trace will always be logged.
+   * @param   Throwable $ex The exception itself.
+   * @param   bool      $show_trace True if it's okay to show the exception's
+   *                    stack trace to the user. The trace will always be
+   *                    logged.
    *
    * @task apocalypse
    */
@@ -342,11 +343,11 @@
   /**
    * Fatal the request completely, sending a plain text message to the client.
    *
-   * @param   string  Plain text message to send to the client.
-   * @param   string  Plain text message to send to the error log. If not
-   *                  provided, the client message is used. You can pass a more
-   *                  detailed message here (e.g., with stack traces) to avoid
-   *                  showing it to users.
+   * @param   string  $message Plain text message to send to the client.
+   * @param   string? $log_message Plain text message to send to the error log.
+   *                  If not provided, the client message is used. You can pass
+   *                  a more detailed message here (e.g., with stack traces) to
+   *                  avoid showing it to users.
    * @return  exit    This method **does not return**.
    *
    * @task apocalypse
@@ -513,7 +514,7 @@
    * Adjustments here primarily impact the environment as seen by subprocesses.
    * The environment is forwarded explicitly by @{class:ExecFuture}.
    *
-   * @param map<string, wild> Input `$_ENV`.
+   * @param map<string, wild> $env Input `$_ENV`.
    * @return map<string, string> Suitable `$_ENV`.
    * @task validation
    */
@@ -653,7 +654,7 @@
   /**
    * Add a new client limits.
    *
-   * @param PhabricatorClientLimit New limit.
+   * @param PhabricatorClientLimit $limit New limit.
    * @return PhabricatorClientLimit The limit.
    */
   public static function addRateLimit(PhabricatorClientLimit $limit) {
@@ -698,7 +699,8 @@
   /**
    * Tear down rate limiting and allow limits to score the request.
    *
-   * @param map<string, wild> Additional, freeform request state.
+   * @param map<string, wild> $request_state Additional, freeform request
+   *   state.
    * @return void
    * @task ratelimit
    */
@@ -745,7 +747,7 @@
    * time and record it with @{method:recordStartupPhase} after the class is
    * available.
    *
-   * @param string Phase name.
+   * @param string $phase Phase name.
    * @task phases
    */
   public static function beginStartupPhase($phase) {
@@ -761,8 +763,8 @@
    * record a time before the class loads, then hand it over once the class
    * becomes available.
    *
-   * @param string Phase name.
-   * @param float Phase start time, from `microtime(true)`.
+   * @param string $phase Phase name.
+   * @param float $time Phase start time, from `microtime(true)`.
    * @task phases
    */
   public static function recordStartupPhase($phase, $time) {
diff --git a/support/startup/preamble-utils.php b/support/startup/preamble-utils.php
--- a/support/startup/preamble-utils.php
+++ b/support/startup/preamble-utils.php
@@ -4,7 +4,7 @@
  * Parse the "X_FORWARDED_FOR" HTTP header to determine the original client
  * address.
  *
- * @param  int  Number of devices to trust.
+ * @param  int? $layers Number of devices to trust.
  * @return void
  */
 function preamble_trust_x_forwarded_for_header($layers = 1) {