diff --git a/scripts/assemble_changelog.py b/scripts/assemble_changelog.py
index 928f73b..ea91578 100755
--- a/scripts/assemble_changelog.py
+++ b/scripts/assemble_changelog.py
@@ -5,6 +5,17 @@
 Add changelog entries to the first level-2 section.
 Create a new level-2 section for unreleased changes if needed.
 Remove the input files unless --keep-entries is specified.
+
+In each level-3 section, entries are sorted in chronological order
+(oldest first). From oldest to newest:
+* Merged entry files are sorted according to their merge date (date of
+  the merge commit that brought the commit that created the file into
+  the target branch).
+* Committed but unmerged entry files are sorted according to the date
+  of the commit that adds them.
+* Uncommitted entry files are sorted according to their modification time.
+
+You must run this program from within a git working directory.
 """
 
 # Copyright (C) 2019, Arm Limited, All Rights Reserved
@@ -224,11 +235,18 @@
 
 
 @functools.total_ordering
-class FileMergeTimestamp:
-    """A timestamp indicating when a file was merged.
+class EntryFileSortKey:
+    """This classes defines an ordering on changelog entry files: older < newer.
 
-    If file1 was merged before file2, then
-    FileMergeTimestamp(file1) <= FileMergeTimestamp(file2).
+    * Merged entry files are sorted according to their merge date (date of
+      the merge commit that brought the commit that created the file into
+      the target branch).
+    * Committed but unmerged entry files are sorted according to the date
+      of the commit that adds them.
+    * Uncommitted entry files are sorted according to their modification time.
+
+    This class assumes that the file is in a git working directory with
+    the target branch checked out.
     """
 
     # Categories of files. A lower number is considered older.
@@ -301,7 +319,12 @@
         return datetime.datetime.fromtimestamp(mtime)
 
     def __init__(self, filename):
-        """Determine the timestamp at which the file was merged."""
+        """Determine position of the file in the changelog entry order.
+
+        This constructor returns an object that can be used with comparison
+        operators, with `sort` and `sorted`, etc. Older entries are sorted
+        before newer entries.
+        """
         self.filename = filename
         creation_hash = self.creation_hash(filename)
         if not creation_hash:
@@ -317,10 +340,9 @@
         self.datetime = self.commit_timestamp(merge_hash)
 
     def sort_key(self):
-        """"Return a sort key for this merge timestamp object.
+        """"Return a concrete sort key for this entry file sort key object.
 
-        ts1.sort_key() < ts2.sort_key() if and only if ts1 is
-        considered to be older than ts2.
+        ``ts1 < ts2`` is implemented as ``ts1.sort_key() < ts2.sort_key()``.
         """
         return (self.category, self.datetime, self.filename)
 
@@ -375,11 +397,10 @@
 def list_files_to_merge(options):
     """List the entry files to merge, oldest first.
 
-    A file is considered older if it was merged earlier. See
-    `FileMergeTimestamp` for details.
+    "Oldest" is defined by `EntryFileSortKey`.
     """
     files_to_merge = glob.glob(os.path.join(options.dir, '*.md'))
-    files_to_merge.sort(key=lambda f: FileMergeTimestamp(f).sort_key())
+    files_to_merge.sort(key=lambda f: EntryFileSortKey(f).sort_key())
     return files_to_merge
 
 def merge_entries(options):
@@ -410,7 +431,7 @@
     """
     files = list_files_to_merge(options)
     for filename in files:
-        ts = FileMergeTimestamp(filename)
+        ts = EntryFileSortKey(filename)
         print(ts.category, ts.datetime, filename)
 
 def set_defaults(options):
