Merge Order Recommendation — Audit 2026-05 PR Stack¶
Histórico — superseded (#2242)
Os comandos de merge no fim deste documento são evidência de 2026-05, anteriores
à merge queue. Com a fila ativa, as flags --squash/--delete-branch fazem
gh pr merge FECHAR o PR sem mergear (#1575 #1815 #1820 #2208). O único caminho
sancionado é python3 scripts/enqueue_merge_queue.py <PR> — ver
docs/runbooks/merge-queue-doctrine.md.
Stack (bottom → top, all branched from main or prior in sequence):
| Order | PR | Track | Why before the next |
|---|---|---|---|
| 1 | #334 | B2 — audit_gate on /coverage/model/info |
Exposes the audit_gate block + real payload dump used by later evidence and the 105-row table. No conflicts with docs. |
| 2a | #338 | B1 — close-the-loop pilot (observations → retrain → gate) | Stacks on #334. Adds the missing end-to-end proof that drive-test ingestion influences audit_gate.passed. Can land in either order with #335 since they touch disjoint files. |
| 2b | #335 | Evidence dumps + rebuttal + perpetual SKU | Adds the reproducible artifacts (coverage-model-info.json, satellite-change last-30, pytest anchors). Note (2026-05-27): During merge-prep we discovered #335 contains a byte-equivalent copy of #332's commit (the rebuttal+SKU work was cherry-picked into #335). #335 is therefore a strict superset of #332. |
| 3 | #333 | C2 — Atoll/Planet bidirectional importer | Pure feature + tests. Base now feat/audit-evidence-dumps (skipping #332). |
| 4 | #336 | C3 — POST /towers/private + A01 redact patch |
Enterprise RAN import. Includes follow-up fix 9acd775 redacting other-tenant owner string from error responses (OWASP A01). |
| 5 | #337 (this PR) | 105-line table refine + PR roster polish | Pure docs + generator. Must land last so it can reference the final state of #332–#338. |
Re-targeted PR base map (post merge-prep, 2026-05-27):
| PR | Head | Base | Status |
|---|---|---|---|
| #334 | feat/b2-audit-gate-coverage-model-info |
main |
MERGEABLE / BLOCKED (waiting on checks/reviews) |
| #338 | feat/b1-coverage-observations-pilot |
feat/b2-audit-gate-coverage-model-info |
MERGEABLE |
| #335 | feat/audit-evidence-dumps |
feat/b2-audit-gate-coverage-model-info |
MERGEABLE |
| #333 | feat/c2-qgis-atoll-bidir |
feat/audit-evidence-dumps |
MERGEABLE / CLEAN |
| #336 | feat/c3-private-towers-api |
feat/c2-qgis-atoll-bidir |
MERGEABLE / CLEAN |
| #337 | feat/audit-105-line-table-refine |
feat/c3-private-towers-api |
MERGEABLE |
| #332 | feat/audit-rebuttal-and-perpetual-sku |
main |
CLOSED (2026-05-27) — superseded by #335 |
Note on gh pr edit --base: the CLI currently fails silently with a
GraphQL "Projects (classic) deprecation" warning when used on this
repo. Use the REST API directly instead:
gh api -X PATCH repos/<owner>/<repo>/pulls/<N> -f base=<branch>
#332 Status (resolved)
PR #332 was closed as superseded on 2026-05-27 after discovery that its
only meaningful commit (48a8205) was byte-for-byte cherry-picked into
335 during the evidence-dumps work. #335 is a strict superset. No¶
content was lost.
Rationale - Minimizes doc rot (the 105 table and roster cite specific PR numbers and artifacts that only exist after their PRs land). - #334 + #335 are the "truth sources" for the B2 gate and the satellite-change rebuttal — everything else builds on them. - #338 (B1) closes the auditor's "no closed loop" challenge directly on top of #334's gate, in parallel with #335's docs. - All are low-risk (mostly docs + new endpoints behind Enterprise/Ultra or new billing SKU that is additive). - After this stack lands, the auditor sign-off on the 105 is complete; B1's stub-residual scenario covers the contractual 8 dB gate.
Post-merge
1. Re-run python3 scripts/expand_audit_rebuttal.py > ...105-alegacoes-ponderadas.md (optional — content is stable).
2. Optional: add the final signed rebuttal + 105 table to the SOC 2 evidence index.
Conflicts expected? None remaining. The duplicate content issue between #332 and #335 was resolved by closing #332.
Suggested command after all approvals:
(histórico — NÃO executar; ver banner)
gh pr merge 334 --squash --delete-branch
gh pr merge 338 --squash --delete-branch # can be in either order with 335
gh pr merge 335 --squash --delete-branch
gh pr merge 333 --squash --delete-branch
gh pr merge 336 --squash --delete-branch
gh pr merge 337 --squash --delete-branch
Last updated: 2026-05-27 (after #332 closed as superseded + B1 PR #338 + final stack retargeting).