checkpoint

⚒️ Generated with [Fabro](https://fabro.sh)
This commit is contained in:
Fabro 2026-03-16 01:32:47 -04:00
parent 78ae22b9a7
commit dba2b79c62
5 changed files with 79 additions and 0 deletions

57
checkpoint.json Normal file
View file

@ -0,0 +1,57 @@
{
"timestamp": "2026-03-16T05:32:47.876203Z",
"current_node": "setup",
"completed_nodes": [
"start",
"setup"
],
"node_retries": {
"start": 1,
"setup": 1
},
"context_values": {
"graph.rankdir": "LR",
"internal.node_visit_count": 1,
"internal.fidelity": "compact",
"failure_class": "deterministic",
"current.preamble": "Goal: Abstract model field should not be equal across models\nDescription\n\t\nConsider the following models:\nclass A(models.Model):\n\tclass Meta:\n\t\tabstract = True\n\tmyfield = IntegerField()\nclass B(A):\n\tpass\nclass C(A):\n\tpass\nIf I pull the fields of B and C into a shared set, one will be de-duplicated away, because they compare as equal. I found this surprising, though in practice using a list was sufficient for my need. The root of the issue is that they compare equal, as fields only consider self.creation_counter when comparing for equality.\nlen({B._meta.get_field('myfield'), C._meta.get_field('myfield')}) == 1\nB._meta.get_field('myfield') == C._meta.get_field('myfield')\nWe should adjust __eq__ so that if the field.model is different, they will compare unequal. Similarly, it is probably wise to adjust __hash__ and __lt__ to match.\nWhen adjusting __lt__, it may be wise to order first by self.creation_counter so that cases not affected by this equality collision won't be re-ordered. In my experimental branch, there was one test that broke if I ordered them by model first.\nI brought this up on IRC django-dev to check my intuitions, and those conversing with me there seemed to agree that the current behavior is not intuitive.\n\n",
"command.stderr": "",
"outcome": "fail",
"command.output": "fatal: destination path '.' already exists and is not an empty directory.\n",
"current_node": "setup",
"internal.retry_count.setup": 1,
"internal.thread_id": "start",
"internal.run_id": "01KKTJ3P2SY78VQ0X36S0X3Y7B",
"graph.goal": "Abstract model field should not be equal across models\nDescription\n\t\nConsider the following models:\nclass A(models.Model):\n\tclass Meta:\n\t\tabstract = True\n\tmyfield = IntegerField()\nclass B(A):\n\tpass\nclass C(A):\n\tpass\nIf I pull the fields of B and C into a shared set, one will be de-duplicated away, because they compare as equal. I found this surprising, though in practice using a list was sufficient for my need. The root of the issue is that they compare equal, as fields only consider self.creation_counter when comparing for equality.\nlen({B._meta.get_field('myfield'), C._meta.get_field('myfield')}) == 1\nB._meta.get_field('myfield') == C._meta.get_field('myfield')\nWe should adjust __eq__ so that if the field.model is different, they will compare unequal. Similarly, it is probably wise to adjust __hash__ and __lt__ to match.\nWhen adjusting __lt__, it may be wise to order first by self.creation_counter so that cases not affected by this equality collision won't be re-ordered. In my experimental branch, there was one test that broke if I ordered them by model first.\nI brought this up on IRC django-dev to check my intuitions, and those conversing with me there seemed to agree that the current behavior is not intuitive.\n",
"failure_signature": "setup|deterministic|script failed with exit code: <n> ## stdout fatal: destination path '.' already exists and is not an empty directory.",
"internal.retry_count.start": 1,
"thread.start.current_node": "setup"
},
"logs": [],
"node_outcomes": {
"start": {
"status": "success",
"duration_ms": 0
},
"setup": {
"status": "fail",
"context_updates": {
"command.output": "fatal: destination path '.' already exists and is not an empty directory.\n",
"command.stderr": ""
},
"failure": {
"message": "Script failed with exit code: 128\n\n## stdout\nfatal: destination path '.' already exists and is not an empty directory.\n",
"failure_class": "deterministic"
},
"duration_ms": 85
}
},
"next_node_id": "solve",
"loop_failure_signatures": {
"setup|deterministic|script failed with exit code: <n> ## stdout fatal: destination path '.' already exists and is not an empty directory.": 1
},
"node_visits": {
"start": 1,
"setup": 1
}
}

View file

@ -0,0 +1,5 @@
{
"command": "git clone https://github.com/django/django.git . && git checkout 453967477e3ddae704cd739eac2449c0e13d464c && python -m pip install -e .",
"language": "shell",
"timeout_ms": null
}

View file

@ -0,0 +1,5 @@
{
"duration_ms": 85,
"exit_code": 128,
"timed_out": false
}

6
nodes/setup/status.json Normal file
View file

@ -0,0 +1,6 @@
{
"status": "fail",
"notes": null,
"failure_reason": "Script failed with exit code: 128\n\n## stdout\nfatal: destination path '.' already exists and is not an empty directory.\n",
"timestamp": "2026-03-16T05:32:47.876011+00:00"
}

6
nodes/start/status.json Normal file
View file

@ -0,0 +1,6 @@
{
"status": "success",
"notes": null,
"failure_reason": null,
"timestamp": "2026-03-16T05:32:47.789080+00:00"
}