Skip to content

fix: the bug reproduced from #715 - #717

Merged
soydiloreto merged 3 commits into
mainfrom
fix/716-the-bug-reproduced-from-715
Nov 11, 2026
Merged

soydiloreto merged 3 commits into
mainfrom
fix/716-the-bug-reproduced-from-715

Conversation

@dilux-bot

@dilux-bot dilux-bot Bot commented Nov 10, 2026 •

Copy link
Copy Markdown
Contributor

📝 What changes

The release scenarios wait until a bot comment carries the dx-prd-seal mark (SEAL in scripts/release-scenarios.py) once an issue is accepted, but nothing the engine writes on the issue carries it: the only comment it keeps is the board (scripts/receipts.py board_text), whose G2 row says "PRD sealed <hash>" without the mark. The fix: scripts/receipts.py gets a constant SEAL_MARK with that same hidden mark, and board_text writes it as the second line of the board (right after the dx-board mark, so board_comment's startswith(BOARD) still finds it) whenever last_seal is given, that is when the issue's acceptance is sealed. A board with no seal (not accepted, or accepted by a lane's label alone) carries no mark, so a scenario never reads the autopilot's result before the seal. The mark is hidden, so what a person sees on the board does not change. scripts/release-scenarios.py keeps its SEAL and gains a self-test check that it equals receipts.SEAL_MARK, so the two cannot drift apart. receipts.py's --test gains two checks: a sealed board carries the mark, after the board mark; an unsealed one does not. The reproduction test is added to tests/repro/ exactly as written on test/repro-issue-715. No permission, secret, lane or limit is widened.

💡 Why

Closes #716. The autopilot works it here in the open: one commit per criterion, each box ticked once its commit is pushed.

🎯 Acceptance criteria

  • C1 Given the reproduction test tests/repro/test_issue_715.py exactly as written, when it runs on the fix, then it passes, where it failed on 0fbbcaa.
    Test: tests/repro/test_issue_715.py

🧭 Decisions

None yet: how the agent settles what the PRD leaves open, one line each.

🙌 Credits

🧪 How I tested it

The reproduction test tests/repro/test_issue_715.py, run in the sandbox (scripts/repro-run.sh run-ref HEAD), now passes (outcome=passed). scripts/receipts.py --test passes with two new checks (a sealed board carries the seal mark right after the board mark; an unsealed board carries none), and scripts/release-scenarios.py --test passes with a new check that its SEAL equals receipts.SEAL_MARK. Every other script's --test passes, except autopilot.py (one #563 fixture that runs make pre-pr) and design-lint.py (stylelint not installed), which fail the same way on the base commit 0fbbcaa in this environment.

The reproduction test tests/repro/test_issue_715.py at 74a0c4a, the pull request's head, is the one that failed on the default branch (its SHA-256 is the sealed PRD's). The agent ran it in the sandbox (a clean copy of its commit; no network, no secrets) before finishing, and gate G7 runs it again the python way it was written, at the head, before it merges.

🤖 AI-generated · Claude Opus 5.5 (Anthropic)

Written by the reproduction job from the report in #715; it fails on main, which confirms the bug. The fix goes in on top of it.

🤖 AI-generated · claude-sonnet-5-5 (Anthropic)
@dilux-bot dilux-bot Bot added autopilot Opened by the autopilot from an accepted issue autopilot:run-1 The autopilot's runs on this pull request labels Nov 10, 2026
@dilux-bot dilux-bot Bot mentioned this pull request Nov 10, 2026
@dilux-bot

dilux-bot Bot commented Nov 10, 2026

Copy link
Copy Markdown
Contributor Author

@soydiloreto: accept it (the accepted label) or say why not #717

🤖 AI-generated · Claude Opus 5.5 (Anthropic)

@dilux-bot

dilux-bot Bot commented Nov 10, 2026 •

Copy link
Copy Markdown
Contributor Author

The pull request's board

State
Waits on soydiloreto: accept it (the accepted label) or say why not (link)

🤖 AI-generated · Claude Opus 5.5 (Anthropic)

@dilux-bot dilux-bot Bot mentioned this pull request Nov 10, 2026
The release scenarios wait until a bot comment carries the dx-prd-seal mark once an issue is accepted, but the board, the only comment the engine keeps on the issue, never wrote it. The board now carries the hidden SEAL_MARK as its second line whenever its acceptance is sealed, and release-scenarios.py checks that its SEAL is that same mark.

Assisted-by: Claude Opus 5.5 (Anthropic)
@dilux-bot

dilux-bot Bot commented Nov 10, 2026

Copy link
Copy Markdown
Contributor Author

@soydiloreto: accept it (the accepted label) or say why not #717

🤖 AI-generated · Claude Opus 5.5 (Anthropic)

@dilux-bot
dilux-bot Bot marked this pull request as ready for review November 10, 2026 00:48
@dilux-bot
dilux-bot Bot requested a review from soydiloreto as a code owner November 10, 2026 00:48
@dilux-bot

dilux-bot Bot commented Nov 10, 2026

Copy link
Copy Markdown
Contributor Author

@soydiloreto: accept it (the accepted label) or say why not #717

🤖 AI-generated · Claude Opus 5.5 (Anthropic)

@dilux-bot dilux-bot Bot added risk:high Set by the Claude review complexity:low Set by the Claude review type:fix The kind of change, read from the diff by the Claude review labels Nov 10, 2026
@dilux-bot

dilux-bot Bot commented Nov 10, 2026

Copy link
Copy Markdown
Contributor Author

Claude review · risk high · complexity low · type fix

Nothing to fix.

First review. The board (board_text) now writes <!-- dx-prd-seal --> as its second line when last_seal is given. That is the mark the release scenarios wait for after accepted. startswith(BOARD) still finds the board, and the hidden state block and its hash are untouched. In issue-accepted.yml, seal-prd runs before board, so the board is rendered with the seal. The lane path in issue-repro.yml does the same. An unsealed board, or one accepted by a lane label alone, carries no mark. receipts.py --test gains two checks (mark present after the board mark; absent when unsealed). release-scenarios.py --test gains a check that SEAL == receipts.SEAL_MARK, so the two cannot drift apart. The reproduction test is added as written. Risk is high only because the policy floor says so for these paths; the change itself is small and contained. I did not run the tests; I read the diff and its callers. No problems found.

No findings.

Policy floor: high (touches high-risk paths: scripts/receipts.py, scripts/release-scenarios.py, tests/repro/test_issue_715.py). Reviewed 6afcb4b (whole pull request; review 1 of 5 automatic). Author trusted for auto-merge: false.

🤖 AI review · claude-sonnet-5-5 (Anthropic) · $0.18, 7 turns

@soydiloreto
soydiloreto merged commit 5b17426 into main Nov 11, 2026
33 checks passed
@soydiloreto
soydiloreto deleted the fix/716-the-bug-reproduced-from-715 branch November 11, 2026 20:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

autopilot:run-1 The autopilot's runs on this pull request autopilot Opened by the autopilot from an accepted issue complexity:low Set by the Claude review risk:high Set by the Claude review type:fix The kind of change, read from the diff by the Claude review

Projects

None yet

Development

Successfully merging this pull request may close these issues.

The bug reproduced from #715

1 participant