Page MenuHomePhabricator

2019 Week 8 (Late February)
Updated 1,826 Days AgoPublic

Summary of changes from February 15, 2019 to February 23, 2019.

PhabricatorrPrP701a9bc3330 commits
ArcanistrARCrARC9581dd0f1 commit
libphutilrPHUrPHU671ec8f4 commits
Instances (SAAS)rSAASrSAASacff9420 commits
Services (SAAS)rSERVICESrSERVICES832743e0 commits
Core (SAAS)rCORErCORE2340e130 commits
  • These changes were promoted to stable.


[] Copy Either Side of a Diff: Text may now be copied from either side of a side-by-side diff.

[] Whitespace Changes: Whitespace changes in Differential are now handled in a way more likely to make everyone equally upset, and all related configuration options have been removed.

Previously, the default whitespace behavior was reasonable in most cases but could misbehave for certain whitespace-only changes, including semantic changes in languages where whitespace is meaningful (like Python and YAML).

(These languages -- where a misplaced space or tab could change the behavior of a program -- were designed in the dark ages of computing, long before vanguard languages like PHP lit a hopeful beacon to guide software engineering into a more sensible and civilized era. This was also before modern times where all programs are written in an informally specified ad-hoc proto-langauge that transpiles through two intermediate languages into Javascript.)

Configuration options, notably differential.whitespace-matters, could be used to change the algorithm so that it always showed whitespace changes and also routinely turned other changes into an unreadable mess. These options have all been removed.

Whitespace changes are now always shown, never used to align diffs, and whitespace changes which only affect indentation levels are shown with reduced visual emphasis.

[] Custom Fields per Subtype: Custom fields behaviors may now be configured per object subtype: for example, "Bug" tasks may be configured to have different fields than "Fish" subtasks. This feature is still somewhat rough, see T13248.

[] Locked Tasks in Maniphest: In Maniphest, task statuses which lock tasks may now either apply the existing "soft" lock against comments or a new "hard" lock against all edits.

The existing "soft" lock (configured with "locked": "comments") is more of an advisory guard rail and prevents users from commenting, but users with permission to edit the task may still edit it after they confirm that they really want to make an edit ("This task is locked, edit anyway?").

The new "hard" lock (configured with "locked": "edits") prevents any user other than the task owner from making any edit. Note that it's possible to completely lock a task so that no one can edit it by locking a task, then assigning it to a user who is on vacation or to a disabled account. Be careful!


Subscribe Permissions: Users no longer need "Can Interact" permission to subscribe to an object, only "Can View". Today, the only case where users have "Can View" but not "Can Interact" is when trying to subscribe to a locked task.

In practice, this means that users may now subscribe to "soft" locked tasks. Previously, they could not. This is a policy behavior change which increases the capabilities of users.

This also means that users may subscribe to "hard" locked tasks, even if they are not the task owner.

Finally, some unusual kinds of subscription edits affecting other users were previously permitted but are no longer permitted. These edits would generally need to have been made via the API.


20190215.daemons.01.dropdataid.php10 ms
20190215.daemons.02.nulldataid.sql92 ms
20190215.harbor.01.stringindex.sql20 ms
20190215.harbor.02.stringcol.sql76,209 ms
20190220.daemon_worker.completed.01.sql2,346 ms
20190220.daemon_worker.completed.02.sql32 ms

"Duration" is the duration for this install, and may not be representative.

Upgrading / Compatibility

  • The differential.whitespace-matters option has been removed. See above.


  • Fixed an issue where logging in with Facebook on a device could fail because of CSP "redirect-after-post" rule.
  • [] Harbormaster unit test names may now be arbitrarily long (previously, they were limited to 255 characters).
  • [] Phabricator now attempts to select a better line for "context" in diffs (usually: the containing class, function, or method definition). The algorithm isn't terribly sophisticated yet, but should no longer decide that { is a good context line. See T11738.
  • [] More interfaces now report user availability (red dot = away, orange dot = busy). Particularly, this may be useful when assigning tasks or selecting reviewers.
  • When we fail to rebuild the search index for an object, it is no longer considered an error condition unless the indexing request was an explicit, manual request via bin/search index. Errors about index rebuilds were noisy and usually not actionable, and dominated by a handful of unusual but expected cases (e.g., where an object is deleted between the time an indexing operation is queued and the time that indexing operation executes).
  • [] Line numbers in Differential now use <td>, not <th>, to interact better with screen readers.
  • [] In diffs, some characters that normally do not appear in source code (like "Zero-Width Space" and "Nonbreaking Space") are highlighted. If you select the surrounding code and copy it to your clipboard, the original text (not the display text) will be copied. The expectation is still that most character set normalization should be happening in lint (before changes reach review!) but a handful of almost-certainly-wrong cases are now called out.
  • [] In diffs, tabs should now be expanded properly to the next tabstop rather than replaced with a static number of spaces in nearly all cases. The tab width is still not configurable. Selecting code which uses tabs and copying it to your clipboard will preserve the original tabs.
  • [] The "moved/copied" gutter in the diff UI is now separated more clearly from the diff text.
  • The daemon queue now tracks wait time.

The [] icon indicates a change backed by support mana.

Last Author
Last Edited
Feb 23 2019, 2:18 PM

Event Timeline

epriestley edited the content of this document. (Show Details)