fix(ship): record-ci reuses its own CI row at the same tree, run and selection (GST-1795) (#4127)

* fix(ship): record-ci reuses its own CI row at the same tree, run and selection (GST-1795)

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>

* test(windows): curate ship-record-ci-reuse like its ship-bin-fixture siblings (run 42382484796)

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>

* fix: pre-landing review fixes

record-ci reuse: the tamper table gains a row for a CI row whose clean flag is false, so dropping reusableCiRow's dirty guard fails a test.

Review-Finding: bin/gstack-evidence:730:completeness-gaps reader=core
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>

* fix: pre-landing review fixes

record-ci reuse stands only on the remainder runs its CI row was written from: a <lane>.skipped row newer than the CI row (a zero-test rerun record-ci refused) vetoes reuse instead of passing on exit 0 alone.

Review-Finding: p1/outside-voice#1 reader=outside-voice
Review-Finding: p1/adversarial-native#1 reader=adversarial-native
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>

---------

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
This commit is contained in:
Garry Tanandcapy-ai[bot] authored and GitHub committed 2026-11-07 15:44:35 +00:00
1 parent 52d6c46957
commit cefcb20a06
8 files changed
+208 -7

No files matched your search

+16
View File
@@ -1270,6 +1270,22 @@ them (`ci_carried=<lane>:<run>/<attempt>`). Each `record-ci` gets the base
policy's [`ci_record_timeout_s`](ship-policy.md#ci-record-timeout) (600 s by
default, 3600 s at most), and accept prints it as `CI_RECORD_TIMEOUT:`.
<a id="record-ci-reuse"></a>**record-ci reuses its own row at the same tree (GST-1795).** Step 5's
carry and accept both call `record-ci`, so at an unchanged pushed tree the
second call would run the `per_file` remainder again. Instead, after it
verifies the run live, `record-ci` reuses the label's newest ledger row when
that row is the CI row it would write again: the same commit, clean tree,
command, verified runs (id and attempt), profiles, jobs, base policy, covered
count, unit and not-owed reason, FRESH within 24 hours, with no test-lane
exception, and the same remainder files, each file's newest `<lane>.skipped`
run at this tree written before that row and a pass under this runtime (a
remainder run after the CI row, such as a zero-test rerun record-ci refused,
vetoes reuse). It runs nothing here, prints
`CI_RECORD_REUSED: label=<lane> runs=<id>/<attempt> tree=<tree12> policy=<policy>`
after its record line, and accept's lane line ends `(reused the CI record at
tree <tree12>)`. Any difference, a newer row for the label, or a run that is no
longer green records afresh (or refuses) as before.
<a id="accept-local-tests"></a>**When accept's final pregate runs the tests here (GST-1606).** The final
pregate's tests stage carries only under a base run profile whose `os` matches
this machine and whose workflow holds a lane this machine runs. A lane carried