anchor.diff:      set(entry, DbField.dirty, dirty ? 1 : null);
       set(entry, DbField.kind, kind);
     }
  +}
  +
  +
  +abstract class DbSyncedRecord extends DbSyncedRecordBase with IntIdMixin {
  +
  +
   }
   
   class DbRecordProviderPutEvent extends DbRecordProviderEvent {
  
positive.code:   Future<T> getFirstDirty() async {
      var txn = indexTransaction(dirtyIndex);
      var id = await txn.getKey(1); // 1 is dirty
      DbSyncedRecord record;
      if (id != null) {
        record = await txnGet(txn.store, id);
      }
  
negative.code:   Future txnClear(DbRecordProviderWriteTransaction txn) => txn.clearRecords();
  }
  
  abstract class DbSyncedRecordProvider<T extends DbSyncedRecordBase, K>
      extends DbRecordBaseProvider<T, K> {
    static const String dirtyIndex = DbField.dirty;
  
    // must be int for indexing
    static const String syncIdIndex = DbField.syncId;
  
    ProviderIndexTransaction<dynamic, T> indexTransaction(String indexName,
            [bool readWrite]) =>
        new ProviderIndexTransaction.fromStoreTransaction(
            storeTransaction(readWrite), indexName);
  
    Future delete(K id, {bool syncing}) async {
      var txn = storeTransaction(true);
      T list = await txnGet(txn, id);
      if (list != null) {
  