diff --git a/buildbot/cbuildbot_metadata.py b/buildbot/cbuildbot_metadata.py
index bd891a8..d471545 100644
--- a/buildbot/cbuildbot_metadata.py
+++ b/buildbot/cbuildbot_metadata.py
@@ -33,6 +33,64 @@
 LATEST_URL = os.path.join(ARCHIVE_ROOT, 'LATEST-master')
 
 
+class LocalBuilderStatus(object):
+  """Class for parsing our local build results."""
+
+  def __init__(self, general_status, board_status_map):
+    """Initialize a LocalBuilderStatus object.
+
+    Args:
+      general_status: The status of general (not board-specific) steps. This is
+        set to FINAL_STATUS_FAILED if any general steps failed.
+      board_status_map: A dictionary mapping boards to the status of the
+        board-specific steps.
+    """
+    self.general_status = general_status
+    self.board_status_map = board_status_map
+
+  @classmethod
+  def Get(cls):
+    """Create a LocalBuilderStatus object containing our current results."""
+    board_status_map = {}
+    general_status = constants.FINAL_STATUS_PASSED
+    for entry in results_lib.Results.Get():
+      passed = entry.result in results_lib.Results.NON_FAILURE_TYPES
+      if entry.board:
+        if passed:
+          board_status_map.setdefault(entry.board,
+                                      constants.FINAL_STATUS_PASSED)
+        else:
+          board_status_map[entry.board] = constants.FINAL_STATUS_FAILED
+      elif not passed:
+        general_status = constants.FINAL_STATUS_FAILED
+
+    return cls(general_status, board_status_map)
+
+  def GetBuilderStatus(self, config_name):
+    """Get the status of the given |config_name| from |board_status_map|.
+
+    A builder is marked as passed if all general steps passed and all steps
+    specific to its boards passed. If a board did not show up in the logs
+    at all (e.g. because the builder aborted before it got to this board),
+    we consider the builder as failed.
+
+    Args:
+      config_name: The name of the builder we wish to get the status of.
+
+    Returns:
+      Whether the builder passed or failed.
+    """
+    if self.general_status == constants.FINAL_STATUS_FAILED:
+      return self.general_status
+
+    for board in cbuildbot_config.config[config_name].boards:
+      status = self.board_status_map.get(board, constants.FINAL_STATUS_FAILED)
+      if status == constants.FINAL_STATUS_FAILED:
+        return status
+
+    return constants.FINAL_STATUS_PASSED
+
+
 class CBuildbotMetadata(object):
   """Class for recording metadata about a run."""
 
@@ -204,6 +262,7 @@
             'platform': platform_tag,
         },
     }
+
     metadata['results'] = []
     for entry in results_lib.Results.Get():
       timestr = datetime.timedelta(seconds=math.ceil(entry.time))
diff --git a/buildbot/cbuildbot_metadata_unittest.py b/buildbot/cbuildbot_metadata_unittest.py
index 436b558..a4322c9 100755
--- a/buildbot/cbuildbot_metadata_unittest.py
+++ b/buildbot/cbuildbot_metadata_unittest.py
@@ -12,9 +12,66 @@
 
 sys.path.insert(0, os.path.abspath('%s/../..' % os.path.dirname(__file__)))
 from chromite.buildbot import cbuildbot_metadata
+from chromite.buildbot import cbuildbot_results as results_lib
+from chromite.buildbot import constants
 from chromite.lib import cros_test_lib
 from chromite.lib import parallel
 
+
+class LocalBuilderStatusTest(cros_test_lib.TestCase):
+  """Test the correctness of the various LocalBuilderStatus methods."""
+
+  Results = results_lib.Results
+  SUCCESS = results_lib.Results.SUCCESS
+
+  def setUp(self):
+    self.Results.Clear()
+
+  def tearDown(self):
+    self.Results.Clear()
+
+  def testEmptyFail(self):
+    """Sometimes there is no board-specific information."""
+    self.Results.Record('Sync', self.SUCCESS)
+    builder_status = cbuildbot_metadata.LocalBuilderStatus.Get()
+    self.assertEqual({}, builder_status.board_status_map)
+    self.assertEqual(constants.FINAL_STATUS_FAILED,
+                     builder_status.GetBuilderStatus('lumpy-paladin'))
+    self.assertEqual(constants.FINAL_STATUS_PASSED,
+                     builder_status.GetBuilderStatus('master-paladin'))
+
+  def testAllFail(self):
+    """Failures in a shared stage cause specific stages to fail."""
+    self.Results.Record('Sync', self.SUCCESS)
+    self.Results.Record('BuildPackages', self.SUCCESS, board='lumpy')
+    self.Results.Record('Completion', 'FAIL')
+    builder_status = cbuildbot_metadata.LocalBuilderStatus.Get()
+    self.assertEqual({'lumpy': constants.FINAL_STATUS_PASSED},
+                     builder_status.board_status_map)
+    self.assertEqual(constants.FINAL_STATUS_FAILED,
+                     builder_status.GetBuilderStatus('lumpy-paladin'))
+    self.assertEqual(constants.FINAL_STATUS_FAILED,
+                     builder_status.GetBuilderStatus('master-paladin'))
+
+  def testMixedFail(self):
+    """Specific stages can pass/fail separately."""
+    self.Results.Record('Sync', self.SUCCESS)
+    self.Results.Record('BuildPackages [lumpy]', 'FAIL', board='lumpy')
+    self.Results.Record('BuildPackages [stumpy]', self.SUCCESS, board='stumpy')
+    builder_status = cbuildbot_metadata.LocalBuilderStatus.Get()
+    self.assertEqual({'lumpy': constants.FINAL_STATUS_FAILED,
+                      'stumpy': constants.FINAL_STATUS_PASSED},
+                     builder_status.board_status_map)
+    self.assertEqual(constants.FINAL_STATUS_FAILED,
+                     builder_status.GetBuilderStatus('lumpy-paladin'))
+    self.assertEqual(constants.FINAL_STATUS_PASSED,
+                     builder_status.GetBuilderStatus('stumpy-paladin'))
+    self.assertEqual(constants.FINAL_STATUS_FAILED,
+                     builder_status.GetBuilderStatus('winky-paladin'))
+    self.assertEqual(constants.FINAL_STATUS_PASSED,
+                     builder_status.GetBuilderStatus('master-paladin'))
+
+
 @cros_test_lib.NetworkTest()
 class MetadataFetchTest(cros_test_lib.TestCase):
   """Test functions for fetching metadata from GS."""
@@ -27,13 +84,14 @@
     metadata_dict = metadata._metadata_dict # pylint: disable=W0212
     self.assertEqual(metadata_dict['status']['status'], 'passed')
 
+
 class MetadataTest(cros_test_lib.TestCase):
   """Tests the correctness of various metadata methods."""
 
   def testGetDict(self):
-    starting_dict = {'key1' : 1,
-                     'key2' : '2',
-                     'cl_actions' : [('a', 1), ('b', 2)]}
+    starting_dict = {'key1': 1,
+                     'key2': '2',
+                     'cl_actions': [('a', 1), ('b', 2)]}
     metadata = cbuildbot_metadata.CBuildbotMetadata(starting_dict)
     ending_dict = metadata.GetDict()
     self.assertEqual(starting_dict, ending_dict)
@@ -41,9 +99,11 @@
   def testMultiprocessSafety(self):
     m = multiprocessing.Manager()
     metadata = cbuildbot_metadata.CBuildbotMetadata(multiprocess_manager=m)
-    starting_dict = {'key1' : 1,
-                     'key2' : '2',
-                     'cl_actions' : [('a', 1), ('b', 2)]}
+    key_dict = {'key1': 1, 'key2': 2}
+    starting_dict = {'key1': 1,
+                     'key2': '2',
+                     'key3': key_dict,
+                     'cl_actions': [('a', 1), ('b', 2)]}
 
     # Test that UpdateWithDict is process-safe
     parallel.RunParallelSteps([lambda: metadata.UpdateWithDict(starting_dict)])
@@ -60,5 +120,6 @@
     self.assertEqual(len(starting_dict['cl_actions']) + 1,
                      len(ending_dict['cl_actions']))
 
+
 if __name__ == '__main__':
   cros_test_lib.main(level=logging.DEBUG)
diff --git a/buildbot/manifest_version.py b/buildbot/manifest_version.py
index 15a2678..a7739f2 100644
--- a/buildbot/manifest_version.py
+++ b/buildbot/manifest_version.py
@@ -14,7 +14,7 @@
 import shutil
 import tempfile
 
-from chromite.buildbot import constants, repository
+from chromite.buildbot import cbuildbot_metadata, constants, repository
 from chromite.lib import cros_build_lib
 from chromite.lib import git
 from chromite.lib import gs
@@ -763,21 +763,18 @@
         raise GenerateBuildSpecException('Builder already inflight')
       raise GenerateBuildSpecException(e)
 
-  def _SetFailed(self):
-    """Marks the buildspec as failed by creating a symlink in fail dir."""
-    filename = '%s.xml' % self.current_version
-    src_file = os.path.join(self.all_specs_dir, filename)
-    for fail_dir in self.fail_dirs:
-      dest_file = os.path.join(fail_dir, filename)
-      logging.debug('Setting build to failed  %s: %s', src_file, dest_file)
-      CreateSymlink(src_file, dest_file)
-
-  def _SetPassed(self):
+  def _SetPassSymlinks(self):
     """Marks the buildspec as passed by creating a symlink in passed dir."""
+    local_builder_status = cbuildbot_metadata.LocalBuilderStatus.Get()
     src_file = '%s.xml' % os.path.join(self.all_specs_dir, self.current_version)
-    for pass_dir in self.pass_dirs:
+    for i, build_name in enumerate(self.build_names):
+      status = local_builder_status.GetBuilderStatus(build_name)
+      if status == constants.FINAL_STATUS_PASSED:
+        pass_dir = self.pass_dirs[i]
+      else:
+        pass_dir = self.fail_dirs[i]
       dest_file = '%s.xml' % os.path.join(pass_dir, self.current_version)
-      logging.debug('Setting build to passed  %s: %s', src_file, dest_file)
+      logging.debug('Build %s: %s -> %s', status, src_file, dest_file)
       CreateSymlink(src_file, dest_file)
 
   def PushSpecChanges(self, commit_message):
@@ -805,10 +802,8 @@
                           '%s' % (BuilderStatus.GetCompletedStatus(success),
                                   self.current_version,
                                   self.build_names[0]))
-        if success:
-          self._SetPassed()
-        else:
-          self._SetFailed()
+
+        self._SetPassSymlinks()
 
         self.PushSpecChanges(commit_message)
       except cros_build_lib.RunCommandError as e:
diff --git a/buildbot/manifest_version_unittest.py b/buildbot/manifest_version_unittest.py
index f806dc1..874f670 100755
--- a/buildbot/manifest_version_unittest.py
+++ b/buildbot/manifest_version_unittest.py
@@ -4,7 +4,7 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-"""Unittests for manifest_version. Needs to be run inside of chroot for mox."""
+"""Unittests for manifest_version. Needs to be run inside of chroot."""
 
 import os
 import sys
@@ -17,6 +17,7 @@
 from chromite.buildbot import manifest_version
 from chromite.buildbot import repository
 from chromite.buildbot import validation_pool
+from chromite.lib import cros_build_lib_unittest
 from chromite.lib import git
 from chromite.lib import cros_test_lib
 from chromite.lib import osutils
@@ -148,7 +149,8 @@
     self.assertEqual(new_info.chrome_branch, '30')
 
 
-class BuildSpecsManagerTest(cros_test_lib.MoxTempDirTestCase):
+class BuildSpecsManagerTest(cros_test_lib.MoxTempDirTestCase,
+                            cros_test_lib.MockTestCase):
   """Tests for the BuildSpecs manager."""
 
   def setUp(self):
@@ -157,7 +159,7 @@
     self.manifest_repo = 'ssh://manifest/repo'
     self.version_file = 'version-file.sh'
     self.branch = 'master'
-    self.build_names = ['x86-generic']
+    self.build_names = ['x86-generic-paladin']
     self.incr_type = 'branch'
 
     repo = repository.RepoRepository(
@@ -167,7 +169,7 @@
       branch=self.branch, dry_run=True)
 
     # Change default to something we clean up.
-    self.tmpmandir = os.path.join(self.tempdir, "man")
+    self.tmpmandir = os.path.join(self.tempdir, 'man')
     osutils.SafeMakedirs(self.tmpmandir)
     self.manager.manifest_dir = self.tmpmandir
 
@@ -255,10 +257,21 @@
     self.mox.VerifyAll()
     self.assertEqual(FAKE_VERSION_STRING_NEXT, version)
 
-  def NotestGetNextBuildSpec(self):
-    """Meta test.  Re-enable if you want to use it to do a big test."""
-    print self.manager.GetNextBuildSpec(retries=0)
-    print self.manager.UpdateStatus('pass')
+  def testGetNextBuildSpec(self):
+    """End-to-end test of updating the manifest."""
+    my_info = manifest_version.VersionInfo('1.2.3', chrome_branch='4')
+    self.PatchObject(manifest_version.BuildSpecsManager,
+                     'GetCurrentVersionInfo', return_value=my_info)
+    self.PatchObject(repository.RepoRepository, 'Sync')
+    self.PatchObject(repository.RepoRepository, 'ExportManifest',
+                     return_value='<manifest />')
+    rc = self.StartPatcher(cros_build_lib_unittest.RunCommandMock())
+    rc.SetDefaultCmdResult()
+
+    self.mox.ReplayAll()
+    self.manager.GetNextBuildSpec(retries=0)
+    self.manager.UpdateStatus('pass')
+    self.mox.VerifyAll()
 
   def testUnpickleBuildStatus(self):
     """Tests that _UnpickleBuildStatus returns the correct values."""
