)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"33c03745eff55ac93bbfb31633fb8d3ce8a73966","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Corresponding `nullable` value."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Logically correct and corresponding to each other `nullable` values in models"},{"line_number":10,"context_line":"and migrations."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I15a9e50b5461a112faca08f0ea68cbae2ce77d0d"},{"line_number":13,"context_line":"Partial-Bug: #1292591"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":21,"id":"AAAAXX%2F%2Fx7g%3D","line":10,"updated":"2014-04-27 23:22:58.000000000","message":"this sentence doesn\u0027t make any sense.","commit_id":"49820e7ec8a8c31efe0029ea5a65137e6ef1b99a"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"fdc55b51b42ef9c6a599137e2516ccebb0404aeb","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Corresponding `nullable` value."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Logically correct and corresponding to each other `nullable` values in models"},{"line_number":10,"context_line":"and migrations."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I15a9e50b5461a112faca08f0ea68cbae2ce77d0d"},{"line_number":13,"context_line":"Partial-Bug: #1292591"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":21,"id":"AAAAXX%2F%2FwI0%3D","line":10,"in_reply_to":"AAAAXX%2F%2Fx7g%3D","updated":"2014-04-28 08:37:04.000000000","message":"Ok, I\u0027ll try to rephrase more clear.","commit_id":"49820e7ec8a8c31efe0029ea5a65137e6ef1b99a"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"c7920ef24af3833ac0d2e38e52ebe62f23963f73","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Corresponding `nullable` value."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Correct `nullable` values in models and migrations:"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"* Region.description already declared as non-nullable in migration, so"},{"line_number":12,"context_line":"model nullable value changed to False too."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":22,"id":"AAAAXX%2F%2FuMk%3D","line":9,"updated":"2014-04-28 13:18:22.000000000","message":"IMO, this should be a commit title, and line 7 should go away. Backticks also look weird.","commit_id":"e4779850769e6c888643477bad032989e1f29936"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"c7920ef24af3833ac0d2e38e52ebe62f23963f73","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Correct `nullable` values in models and migrations:"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"* Region.description already declared as non-nullable in migration, so"},{"line_number":12,"context_line":"model nullable value changed to False too."},{"line_number":13,"context_line":"* FederationProtocol.mapping_id logically must be not nullable so provided"},{"line_number":14,"context_line":"corresponding migration."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":22,"id":"AAAAXX%2F%2FuMY%3D","line":11,"updated":"2014-04-28 13:18:22.000000000","message":"is already declared","commit_id":"e4779850769e6c888643477bad032989e1f29936"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"18b260d0242e2cc112dd535e5681812cae8f9c60","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Correct `nullable` values in models and migrations:"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"* Region.description already declared as non-nullable in migration, so"},{"line_number":12,"context_line":"model nullable value changed to False too."},{"line_number":13,"context_line":"* FederationProtocol.mapping_id logically must be not nullable so provided"},{"line_number":14,"context_line":"corresponding migration."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":22,"id":"facab960_d6cd645f","line":11,"in_reply_to":"AAAAXX%2F%2FuMY%3D","updated":"2014-04-28 23:13:20.000000000","message":"remove \"already\"","commit_id":"e4779850769e6c888643477bad032989e1f29936"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"c7920ef24af3833ac0d2e38e52ebe62f23963f73","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Correct `nullable` values in models and migrations:"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"* Region.description already declared as non-nullable in migration, so"},{"line_number":12,"context_line":"model nullable value changed to False too."},{"line_number":13,"context_line":"* FederationProtocol.mapping_id logically must be not nullable so provided"},{"line_number":14,"context_line":"corresponding migration."},{"line_number":15,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":22,"id":"AAAAXX%2F%2FuMU%3D","line":12,"updated":"2014-04-28 13:18:22.000000000","message":"is changed","commit_id":"e4779850769e6c888643477bad032989e1f29936"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"18b260d0242e2cc112dd535e5681812cae8f9c60","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Correct `nullable` values in models and migrations:"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"* Region.description already declared as non-nullable in migration, so"},{"line_number":12,"context_line":"model nullable value changed to False too."},{"line_number":13,"context_line":"* FederationProtocol.mapping_id logically must be not nullable so provided"},{"line_number":14,"context_line":"corresponding migration."},{"line_number":15,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":22,"id":"facab960_16d8ac1c","line":12,"in_reply_to":"AAAAXX%2F%2FuMU%3D","updated":"2014-04-28 23:13:20.000000000","message":"also, change \"model\" to \"the model\"","commit_id":"e4779850769e6c888643477bad032989e1f29936"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"c7920ef24af3833ac0d2e38e52ebe62f23963f73","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"* Region.description already declared as non-nullable in migration, so"},{"line_number":12,"context_line":"model nullable value changed to False too."},{"line_number":13,"context_line":"* FederationProtocol.mapping_id logically must be not nullable so provided"},{"line_number":14,"context_line":"corresponding migration."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: I15a9e50b5461a112faca08f0ea68cbae2ce77d0d"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":22,"id":"AAAAXX%2F%2FuMA%3D","line":13,"updated":"2014-04-28 13:18:22.000000000","message":"FederationProtocol.mapping_id must logically be not nullable. Provide a migration script to add the NOT NULL constraint to the column.","commit_id":"e4779850769e6c888643477bad032989e1f29936"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"45e5fd02985ab591101d447c9dfa268bc365a279","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"* Region.description already declared as non-nullable in migration, so"},{"line_number":12,"context_line":"model nullable value changed to False too."},{"line_number":13,"context_line":"* FederationProtocol.mapping_id logically must be not nullable so provided"},{"line_number":14,"context_line":"corresponding migration."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: I15a9e50b5461a112faca08f0ea68cbae2ce77d0d"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":22,"id":"bad4c104_2ac5405b","line":13,"in_reply_to":"AAAAXX%2F%2FuMA%3D","updated":"2014-04-29 09:57:17.000000000","message":"Done for all.","commit_id":"e4779850769e6c888643477bad032989e1f29936"}],"keystone/catalog/backends/sql.py":[{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"16a68be3e15955883557813a8ac91e1aaa87a79d","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    __tablename__ \u003d \u0027region\u0027"},{"line_number":31,"context_line":"    attributes \u003d [\u0027id\u0027, \u0027description\u0027, \u0027parent_region_id\u0027]"},{"line_number":32,"context_line":"    id \u003d sql.Column(sql.String(64), primary_key\u003dTrue)"},{"line_number":33,"context_line":"    description \u003d sql.Column(sql.String(255), nullable\u003dFalse)"},{"line_number":34,"context_line":"    # NOTE(jaypipes): Right now, using an adjacency list model for"},{"line_number":35,"context_line":"    #                 storing the hierarchy of regions is fine, since"},{"line_number":36,"context_line":"    #                 the API does not support any kind of querying for"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAW3%2F%2Fh1g%3D","line":33,"updated":"2014-04-13 18:40:05.000000000","message":"This seems to have nothing to do with the change in the other file. I\u0027d rather see this change split into two patches, or at least mentioned in the commit message.","commit_id":"96ce521760dd22baad8503f57da86d5730d7fe1b"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"ef949b646948ccb2fa669306ea2920b432aea95f","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    __tablename__ \u003d \u0027region\u0027"},{"line_number":31,"context_line":"    attributes \u003d [\u0027id\u0027, \u0027description\u0027, \u0027parent_region_id\u0027]"},{"line_number":32,"context_line":"    id \u003d sql.Column(sql.String(64), primary_key\u003dTrue)"},{"line_number":33,"context_line":"    description \u003d sql.Column(sql.String(255), nullable\u003dFalse)"},{"line_number":34,"context_line":"    # NOTE(jaypipes): Right now, using an adjacency list model for"},{"line_number":35,"context_line":"    #                 storing the hierarchy of regions is fine, since"},{"line_number":36,"context_line":"    #                 the API does not support any kind of querying for"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAW3%2F%2FeHg%3D","line":33,"in_reply_to":"AAAAW3%2F%2Fh1g%3D","updated":"2014-04-14 12:41:45.000000000","message":"Well, I conceived the patch to be around fixing all inconsistent nullable values. `description` declared as not nullable in 037-th migration. The commit message and the patch content seems to me pretty consistent. I can list all the inconsistencies in the  commit message, could it be helpful?","commit_id":"96ce521760dd22baad8503f57da86d5730d7fe1b"}],"keystone/contrib/federation/backends/sql.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"686b21a8801c60ebce470795e9b194b1482acb24","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    id \u003d sql.Column(sql.String(64), primary_key\u003dTrue)"},{"line_number":27,"context_line":"    idp_id \u003d sql.Column(sql.String(64), sql.ForeignKey(\u0027identity_provider.id\u0027,"},{"line_number":28,"context_line":"                        ondelete\u003d\u0027CASCADE\u0027), primary_key\u003dTrue)"},{"line_number":29,"context_line":"    mapping_id \u003d sql.Column(sql.String(64), nullable\u003dTrue)"},{"line_number":30,"context_line":"    __table_args__ \u003d (sql.UniqueConstraint(\u0027id\u0027, \u0027idp_id\u0027), dict())"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAWH%2F9l%2BM%3D","line":29,"updated":"2014-04-03 13:43:03.000000000","message":"it doesn\u0027t make sense for this to be nullabe -- this needs a migration rather than correcting the model","commit_id":"5b412b63f516950d97f4bf755fbb4e231d03d4a5"}],"keystone/contrib/federation/migrate_repo/versions/003_mapping_id_nullable_false.py":[{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"16a68be3e15955883557813a8ac91e1aaa87a79d","unresolved":false,"context_lines":[{"line_number":29,"context_line":"def downgrade(migrate_engine):"},{"line_number":30,"context_line":"    meta \u003d sa.MetaData(bind\u003dmigrate_engine)"},{"line_number":31,"context_line":"    federation_protocol \u003d sa.Table(\u0027federation_protocol\u0027, meta, autoload\u003dTrue)"},{"line_number":32,"context_line":"    federation_protocol.c.alter(nullable\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAW3%2F%2Fh10%3D","line":32,"updated":"2014-04-13 18:40:05.000000000","message":"column name seems to be missing here","commit_id":"96ce521760dd22baad8503f57da86d5730d7fe1b"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"ef949b646948ccb2fa669306ea2920b432aea95f","unresolved":false,"context_lines":[{"line_number":29,"context_line":"def downgrade(migrate_engine):"},{"line_number":30,"context_line":"    meta \u003d sa.MetaData(bind\u003dmigrate_engine)"},{"line_number":31,"context_line":"    federation_protocol \u003d sa.Table(\u0027federation_protocol\u0027, meta, autoload\u003dTrue)"},{"line_number":32,"context_line":"    federation_protocol.c.alter(nullable\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAW3%2F%2Fdu8%3D","line":32,"in_reply_to":"AAAAW3%2F%2Fh10%3D","updated":"2014-04-14 12:41:45.000000000","message":"Done","commit_id":"96ce521760dd22baad8503f57da86d5730d7fe1b"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"33c03745eff55ac93bbfb31633fb8d3ce8a73966","unresolved":false,"context_lines":[{"line_number":21,"context_line":"    federation_protocol \u003d sa.Table(\u0027federation_protocol\u0027, meta, autoload\u003dTrue)"},{"line_number":22,"context_line":"    stmt \u003d (federation_protocol.update()."},{"line_number":23,"context_line":"            where(federation_protocol.c.mapping_id.is_(None))."},{"line_number":24,"context_line":"            values(mapping_id\u003d0))"},{"line_number":25,"context_line":"    migrate_engine.execute(stmt)"},{"line_number":26,"context_line":"    federation_protocol.c.mapping_id.alter(nullable\u003dFalse)"},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAAXX%2F%2Fx6s%3D","line":24,"updated":"2014-04-27 23:22:58.000000000","message":"why is 0 used here? Add a comment.\n\nAlso, why not change the model?","commit_id":"49820e7ec8a8c31efe0029ea5a65137e6ef1b99a"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"fdc55b51b42ef9c6a599137e2516ccebb0404aeb","unresolved":false,"context_lines":[{"line_number":21,"context_line":"    federation_protocol \u003d sa.Table(\u0027federation_protocol\u0027, meta, autoload\u003dTrue)"},{"line_number":22,"context_line":"    stmt \u003d (federation_protocol.update()."},{"line_number":23,"context_line":"            where(federation_protocol.c.mapping_id.is_(None))."},{"line_number":24,"context_line":"            values(mapping_id\u003d0))"},{"line_number":25,"context_line":"    migrate_engine.execute(stmt)"},{"line_number":26,"context_line":"    federation_protocol.c.mapping_id.alter(nullable\u003dFalse)"},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAAXX%2F%2FwPQ%3D","line":24,"in_reply_to":"AAAAXX%2F%2Fx6s%3D","updated":"2014-04-28 08:37:04.000000000","message":"\u003e\u003e\u003e Also, why not change the model?\nPlease see patch-set #3 and Dolph\u0027s comment https://review.openstack.org/#/c/84446/3/keystone/contrib/federation/backends/sql.py\n\n\u003e\u003e\u003ewhy is 0 used here? Add a comment.\n\nHmm, I have tried to prevent database errors when the field will be changed to non-nullable. This is really wrong solution, it should be an empty string, because of mapping_id \u003d sql.Column(sql.String(64). Thanks you! Comment will be added.","commit_id":"49820e7ec8a8c31efe0029ea5a65137e6ef1b99a"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"c7920ef24af3833ac0d2e38e52ebe62f23963f73","unresolved":false,"context_lines":[{"line_number":20,"context_line":"    meta \u003d sa.MetaData(bind\u003dmigrate_engine)"},{"line_number":21,"context_line":"    federation_protocol \u003d sa.Table(\u0027federation_protocol\u0027, meta, autoload\u003dTrue)"},{"line_number":22,"context_line":"    # NOTE(i159): The column will be changed to non-nullable. To prevent"},{"line_number":23,"context_line":"    # database errors when the column will be altered, all the existing"},{"line_number":24,"context_line":"    # null-records should be filled with not null values."},{"line_number":25,"context_line":"    stmt \u003d (federation_protocol.update()."},{"line_number":26,"context_line":"            where(federation_protocol.c.mapping_id.is_(None))."}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAXX%2F%2FuT0%3D","line":23,"updated":"2014-04-28 13:18:22.000000000","message":"s/will be/is","commit_id":"e4779850769e6c888643477bad032989e1f29936"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"18b260d0242e2cc112dd535e5681812cae8f9c60","unresolved":false,"context_lines":[{"line_number":21,"context_line":"    federation_protocol \u003d sa.Table(\u0027federation_protocol\u0027, meta, autoload\u003dTrue)"},{"line_number":22,"context_line":"    # NOTE(i159): The column will be changed to non-nullable. To prevent"},{"line_number":23,"context_line":"    # database errors when the column will be altered, all the existing"},{"line_number":24,"context_line":"    # null-records should be filled with not null values."},{"line_number":25,"context_line":"    stmt \u003d (federation_protocol.update()."},{"line_number":26,"context_line":"            where(federation_protocol.c.mapping_id.is_(None))."},{"line_number":27,"context_line":"            values(mapping_id\u003d\u0027\u0027))"}],"source_content_type":"text/x-python","patch_set":22,"id":"facab960_3604d07d","line":24,"updated":"2014-04-28 23:13:20.000000000","message":"why should they be filled with empty strings?","commit_id":"e4779850769e6c888643477bad032989e1f29936"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"45e5fd02985ab591101d447c9dfa268bc365a279","unresolved":false,"context_lines":[{"line_number":21,"context_line":"    federation_protocol \u003d sa.Table(\u0027federation_protocol\u0027, meta, autoload\u003dTrue)"},{"line_number":22,"context_line":"    # NOTE(i159): The column will be changed to non-nullable. To prevent"},{"line_number":23,"context_line":"    # database errors when the column will be altered, all the existing"},{"line_number":24,"context_line":"    # null-records should be filled with not null values."},{"line_number":25,"context_line":"    stmt \u003d (federation_protocol.update()."},{"line_number":26,"context_line":"            where(federation_protocol.c.mapping_id.is_(None))."},{"line_number":27,"context_line":"            values(mapping_id\u003d\u0027\u0027))"}],"source_content_type":"text/x-python","patch_set":22,"id":"bad4c104_6a3108a2","line":24,"in_reply_to":"facab960_3604d07d","updated":"2014-04-29 09:57:17.000000000","message":"Why is it should be filled? Because of the column was nullable and it is possible that empty records are existing in a database.\n\nWhy empty? If it was not filled, so it should be not null, but formally it should be empty.\n\nWhy string? https://github.com/openstack/keystone/blob/master/keystone/contrib/federation/backends/sql.py#L29 The field is string type.","commit_id":"e4779850769e6c888643477bad032989e1f29936"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"18b260d0242e2cc112dd535e5681812cae8f9c60","unresolved":false,"context_lines":[{"line_number":26,"context_line":"            where(federation_protocol.c.mapping_id.is_(None))."},{"line_number":27,"context_line":"            values(mapping_id\u003d\u0027\u0027))"},{"line_number":28,"context_line":"    migrate_engine.execute(stmt)"},{"line_number":29,"context_line":"    federation_protocol.c.mapping_id.alter(nullable\u003dFalse)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"def downgrade(migrate_engine):"}],"source_content_type":"text/x-python","patch_set":22,"id":"facab960_b6f7008c","line":29,"updated":"2014-04-28 23:13:20.000000000","message":"should the column be made not nullable with default \u0027\u0027 ?\n\nAlso, there should be a unit test for this migration. Add some values and then make them nullable.\n\nAlso, the unit test should do a downgrade.","commit_id":"e4779850769e6c888643477bad032989e1f29936"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"45e5fd02985ab591101d447c9dfa268bc365a279","unresolved":false,"context_lines":[{"line_number":26,"context_line":"            where(federation_protocol.c.mapping_id.is_(None))."},{"line_number":27,"context_line":"            values(mapping_id\u003d\u0027\u0027))"},{"line_number":28,"context_line":"    migrate_engine.execute(stmt)"},{"line_number":29,"context_line":"    federation_protocol.c.mapping_id.alter(nullable\u003dFalse)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"def downgrade(migrate_engine):"}],"source_content_type":"text/x-python","patch_set":22,"id":"bad4c104_8ab48cf3","line":29,"in_reply_to":"facab960_b6f7008c","updated":"2014-04-29 09:57:17.000000000","message":"should the column be made not nullable with default \u0027\u0027 ? I think it shouldn\u0027t. Because of it is not creation, it is alter and we have filled all potentially empty records.\n\nOk, I\u0027ll write the test with downgrade.","commit_id":"e4779850769e6c888643477bad032989e1f29936"}]}
