diff --git a/.status b/.status
index c3743e9..ec2d028 100644
--- a/.status
+++ b/.status
@@ -5,11 +5,14 @@
 # Don't run any test-like files that show up in packages directories. It
 # shouldn't be necessary to run "pub install" in these packages, but if you do
 # it shouldn't break the tests.
-*/packages/*/*: Skip
-*/*/packages/*/*: Skip
-*/*/*/packages/*/*: Skip
-*/*/*/*/packages/*/*: Skip
-*/*/*/*/*/packages/*/*: Skip
+*/packages/*/*: SkipByDesign
+*/*/packages/*/*: SkipByDesign
+*/*/*/packages/*/*: SkipByDesign
+*/*/*/*/packages/*/*: SkipByDesign
+*/*/*/*/*/packages/*/*: SkipByDesign
+
+# Fails build step because of bad imports
+build/html_import_annotation_test: SkipByDesign # Invalid once built
 
 [ $compiler == none && ($runtime == dartium || $runtime == ContentShellOnAndroid) ]
 test/interop_test: Pass, RuntimeError # Issue 18931
@@ -18,8 +21,10 @@
 build/test/interop_test: Fail # Issue 19329
 
 [ $runtime == vm || $runtime == d8 || $runtime == jsshell ]
-test/*: Skip # uses dart:html
-build/test/*: Skip # uses dart:html
+test/*: SkipByDesign # uses dart:html
+build/test/*: SkipByDesign # uses dart:html
+e2e_test/html_imports/test/*: SkipByDesign # uses dart:html
+build/e2e_test/html_imports/test/*: SkipByDesign # uses dart:html
 
 [ $compiler == dart2js ]
 test/*: Skip # use pub-build to run tests (they need the companion .html file)
diff --git a/e2e_test/html_imports/pubspec.yaml b/e2e_test/html_imports/pubspec.yaml
index 8ebcd6e..996c03b 100644
--- a/e2e_test/html_imports/pubspec.yaml
+++ b/e2e_test/html_imports/pubspec.yaml
@@ -8,4 +8,5 @@
   unittest: '^0.11.0'
 transformers:
 - web_components:
+    $include: '**/*_test.html'
     entry_points: test/basic_test.html
diff --git a/e2e_test/html_imports/test/basic_test.html b/e2e_test/html_imports/test/basic_test.html
index 0ee8bdc..e899e5d 100644
--- a/e2e_test/html_imports/test/basic_test.html
+++ b/e2e_test/html_imports/test/basic_test.html
@@ -1,8 +1,11 @@
 <!DOCTYPE html>
 <html>
   <head>
+    <meta name="dart.unittest" content="full-stack-traces">
   </head>
   <body>
+    <script type="text/javascript"
+            src="/root_dart/tools/testing/dart/test_controller.js"></script>
     <script type="application/dart" src="basic_test.dart"></script>
     <script src="packages/browser/dart.js"></script>
   </body>
diff --git a/lib/build/import_inliner.dart b/lib/build/import_inliner.dart
index c87dcb6..de8beb0 100644
--- a/lib/build/import_inliner.dart
+++ b/lib/build/import_inliner.dart
@@ -34,7 +34,7 @@
   }
 
   apply(Transform transform) {
-    var logger = new BuildLogger(transform);
+    var logger = new BuildLogger(transform, convertErrorsToWarnings: true);
     return new ImportInliner(transform, transform.primaryInput.id, logger)
         .run();
   }
@@ -58,7 +58,7 @@
       var primaryDocument = imports[primaryInput].document;
 
       // Normalize urls in the entry point.
-      var changed = new _UrlNormalizer(transform, primaryInput, logger)
+      var changed = new _UrlNormalizer(primaryInput, primaryInput, logger)
           .visit(primaryDocument);
 
       // Inline things if needed, always have at least one (the entry point).
@@ -104,7 +104,7 @@
           .querySelectorAll('script[type="$dartType"]')
           .forEach((script) => script.remove());
       // Normalize urls in attributes and inline css.
-      new _UrlNormalizer(transform, asset, logger).visit(document);
+      new _UrlNormalizer(primaryInput, asset, logger).visit(document);
       // Replace the import with its contents by appending the nodes
       // immediately before the import one at a time, and then removing the
       // import from the document.
@@ -157,7 +157,8 @@
 // completely from polymer or exposing it publicly here and using that in
 // polymer.
 class _UrlNormalizer extends TreeVisitor {
-  final Transform transform;
+  /// [AssetId] for the main entry point.
+  final AssetId primaryInput;
 
   /// Asset where the original content (and original url) was found.
   final AssetId sourceId;
@@ -174,10 +175,9 @@
 
   final BuildLogger logger;
 
-  _UrlNormalizer(transform, this.sourceId, this.logger)
-      : transform = transform,
-        topLevelPath = '../' *
-            (transform.primaryInput.id.path.split('/').length - 2);
+  _UrlNormalizer(AssetId primaryInput, this.sourceId, this.logger)
+      : primaryInput = primaryInput,
+        topLevelPath = '../' * (primaryInput.path.split('/').length - 2);
 
   bool visit(Node node) {
     super.visit(node);
@@ -215,7 +215,7 @@
   // TODO(jmesserly): use csslib here instead? Parsing with RegEx is sadness.
   // Maybe it's reliable enough for finding URLs in CSS? I'm not sure.
   String visitCss(String cssText) {
-    var url = spanUrlFor(sourceId, transform.primaryInput.id, logger);
+    var url = spanUrlFor(sourceId, primaryInput, logger);
     var src = new SourceFile(cssText, url: url);
     return cssText.replaceAllMapped(_url, (match) {
       changed = true;
@@ -266,7 +266,7 @@
 
     var id = uriToAssetId(sourceId, hrefToParse, logger, span);
     if (id == null) return href;
-    var primaryId = transform.primaryInput.id;
+    var primaryId = primaryInput;
 
     // Build the new path, placing back any suffixes that we stripped earlier.
     var prefix =
diff --git a/lib/build/script_compactor.dart b/lib/build/script_compactor.dart
index e26a979..c1f7931 100644
--- a/lib/build/script_compactor.dart
+++ b/lib/build/script_compactor.dart
@@ -183,7 +183,7 @@
         var id = uriToAssetId(from, uri, logger, span, errorOnAbsolute: false);
         if (id == null) continue;
 
-        var primaryId = transform.primaryInput.id;
+        var primaryId = primaryInput;
         var newUri = assetUrlFor(id, primaryId, logger);
         if (newUri != uri) {
           output.edit(span.start.offset, span.end.offset, "'$newUri'");
diff --git a/test/build/import_inliner_test.dart b/test/build/import_inliner_test.dart
index 5eb1c9f..1581355 100644
--- a/test/build/import_inliner_test.dart
+++ b/test/build/import_inliner_test.dart
@@ -605,7 +605,7 @@
         <link rel="import" href="foo.html">
         </head></html>''',
   }, {}, [
-    'error: ${inlineImportFail.create({
+    'warning: ${inlineImportFail.create({
           'error': 'Could not find asset a|web/foo.html.'
       }).snippet} '
         '(web/test.html 1 8)',
