Merge a bug fix once. A GitLab Duo agent carries it to every release branch you name. A script, not the model, accepts each backport only if the fix’s regression test fails before it, passes after it, and nothing that passed before breaks.
marshmallow’s own code, tests and release tags.
!1 merged on main Fix handling data_key in ValidationErrors raised in schema validators
release/3.25fails beforepasses afterProven, adaptedrelease/3.23fails beforepasses afterProven, adaptedrelease/3.21fails beforepasses afterProven, adaptedOpen a row to see each step.
AssertionError: assert {'fooKey': ['..._schema str']} == {'fooKey': ['...schema dict']} CI re-probesrc/marshmallow/decorators.py, src/marshmallow/schema.py, src/marshmallow/types.py, tests/test_decorators.py, CHANGELOG.rstResolved conflicts: dropped 3.26 changelog/RenderModule/noqa bits, kept SchemaValidator protocol type and used ma_fields.Field annotation; fix logic unchanged.
Integrity check: unchanged, test unchanged.
Compare on GitLab: the fix, !1 and the port, !2.
Final judge: proven-adapted, existing tests 1223/1223
Attempts and their feedback: not recorded (this proof note predates that record).
bp:repro Bug reproduced before backport (expected) successbp:verify Regression test passes, existing tests still pass successbp:integrity Test unchanged or a valid mechanical port successSAST Static analysis of the backport successSecret detection No secrets in the backport successAssertionError: assert {'fooKey': ['..._schema str']} == {'fooKey': ['...schema dict']} CI re-probesrc/marshmallow/decorators.py, src/marshmallow/schema.py, src/marshmallow/types.py, tests/test_decorators.py, CHANGELOG.rstResolved conflicts: dropped unrelated 3.26 changelog/RenderModule/noqa bits, kept SchemaValidator protocol type, added 3.23.4 changelog entry; fix logic unchanged.
Integrity check: unchanged, test unchanged.
Compare on GitLab: the fix, !1 and the port, !3.
Final judge: proven-adapted, existing tests 1231/1231
Attempts and their feedback: not recorded (this proof note predates that record).
bp:repro Bug reproduced before backport (expected) successbp:verify Regression test passes, existing tests still pass successbp:integrity Test unchanged or a valid mechanical port successSAST Static analysis of the backport successSecret detection No secrets in the backport successAssertionError: assert {'fooKey': ['..._schema str']} == {'fooKey': ['...schema dict']} CI re-probesrc/marshmallow/decorators.py, src/marshmallow/schema.py, src/marshmallow/types.py, tests/test_decorators.py, CHANGELOG.rstResolved conflicts: kept 3.21's decorators imports (no defaultdict), dropped unrelated 3.26 changelog/RenderModule/noqa bits, kept SchemaValidator protocol type, added 3.21.4 changelog entry.
Integrity check: unchanged, test unchanged.
Compare on GitLab: the fix, !1 and the port, !4.
Final judge: proven-adapted, existing tests 1229/1229
Attempts and their feedback: not recorded (this proof note predates that record).
bp:repro Bug reproduced before backport (expected) successbp:verify Regression test passes, existing tests still pass successbp:integrity Test unchanged or a valid mechanical port successSAST Static analysis of the backport successSecret detection No secrets in the backport successbp judge decidesA script with no LLM runs the test before and after, and every test that passed before.Seven rules hold every time. Open one to see the code that enforces it and the test that checks it.
Enforced in tools/bp/publish.py, tested by test_agent_claims_are_ignored.
Enforced in tools/bp/integrity.py, tested by test_changed_literal_is_invalid.
Enforced in tools/bp/judge.py, tested by test_editing_tools_or_other_tests_fails.
Enforced in tools/bp/judge.py, tested by test_attempts_are_capped_but_final_judge_still_runs.
Enforced in tools/bp/ci.py, tested by test_ci_gates_fail_when_the_backport_is_tampered.
Enforced in ci/backport.yml, tested by test_ci_gates_pass_on_a_published_backport.
Enforced in tools/bp/plan.py, tested by test_parse_rejects_tokens_that_are_not_branches_or_test_ids.
Try the real-code test: marshmallow-backports.
To install DuoBack on a project:
ci/backport.yml from the DuoBack project in your .gitlab-ci.yml.Backport-to:, Fixes: and Bp-Test: lines in the commit message.tools/bp/; the adapted backport’s MR pipeline..gitlab/duo/flows/backport.yml.docs/validation.md; its proof, live.tools/bp/integrity.py; the job that reproduced the bug.README.md; the proof table on the fix MR.Bp-Test). No test, no proof.