You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit 3ecae49
Browse filesBrowse the repository at this point in the historyBrowse files
"the round trip: the card's 41,699 bytes with a multi-byte character across every 16 KiB boundary of every stream, byte for byte through pack, the wire, the runner's env text, the validator and the executor; a per-chunk decode is NOT STORED": 8,
1110
1110
'the read-back end to end: after a success run each body at its locator — a corrupted read-back exits 4 through the CLI, an unreadable or unfound one 6, a body-less stroke reads nothing, never a retry': 17,
1111
1111
'the issue_create re-list: a list that lags the create reads back IDENTICAL on a bounded re-list; a real miss is still unfound (exit 6) after exactly the declared window; an unreadable re-list is unread; the create is never re-sent': 13,
1112
+
"the run's annotations: after a success run carrying an op that creates or moves a card its check-run annotations are read first — an issue_create they name read back AT that number with NO re-list; absent, unreadable, ignored or past the cap, the re-list as before; a stroke with no such op reads none": 14,
1112
1113
'the wiring: the POST is paced and on the roster, the reads are not, the token never reaches the log': 5,
1113
1114
'the CLI: a dry run sends nothing, usage, the exit ladder, the session derived from the container, a route read behind a dead proxy refuses': 11,
1114
1115
});
1115
-
constSELF_TEST_BATTERY_FLOOR=16;
1116
+
constSELF_TEST_BATTERY_FLOOR=17;
1116
1117
constUNATTRIBUTED_BATTERY='(unattributed)';
1117
1118
1118
1119
constbatteryCases=newMap();
@@ -1366,7 +1367,14 @@ export async function selfTest() {
@@ -1722,6 +1740,99 @@ export async function selfTest() {
1722
1740
t("the re-list is issue_create's alone: a pull its head does not find is read ONCE and unfound, as before",[noPr.state,noPr.readBack?.rows?.[0]?.cls,pulls],['unverified','unfound',1]);
1723
1741
}
1724
1742
1743
+
// ── the run's annotations ───────────────────────────────────────────────
1744
+
battery("the run's annotations: after a success run carrying an op that creates or moves a card its check-run annotations are read first — an issue_create they name read back AT that number with NO re-list; absent, unreadable, ignored or past the cap, the re-list as before; a stroke with no such op reads none");
"⭐ the run's annotation names #20998: read back AT that number — IDENTICAL, success, exit 0 — with ZERO list reads and no wait, though the list never shows it",
t('…the jobs, then their check run\'s annotations, then the issue — all after the run completed — and ONE write, the dispatch',[order.indexOf(JOBS)>order.lastIndexOf(`GET /repos/${RELAY_REPO}/actions/runs`),order.indexOf(NOTES)>order.indexOf(JOBS),order.indexOf(ONE)>order.indexOf(NOTES),writes(hit)],[true,true,true,[DISPATCH]]);
1776
+
t("…and the result hands the matched row on for the callers, the runner's own notice passed over",[hit.annotations?.state,hit.annotations?.rows],['read',[{action: 1,op: 'issue_create',number: 20998,url: URL98,repo: REPO}]]);
t('a split character on the annotated issue is NOT STORED on THAT issue, exit 4',[split.state,split.notStored,split.readBack?.rows?.[0]?.where,exitForResult(split)],['failure',true,`${REPO}#20998`,EXIT_NOT_STORED]);
t('⛔ an annotated number whose issue cannot be read is unverified (unread), exit 6 — and still NO list: the fallback is for an ABSENT annotation only',[gone.state,gone.readBack?.rows?.[0]?.cls,calls(gone,ISSUES),exitForResult(gone)],['unverified','unread',0,EXIT_UNCONFIRMED]);
1781
+
1782
+
// The fallback, unchanged: absent, unreadable or ignored, the list is read and re-read as before.
t('absent (the check run carries only the runner\'s notice): said, and the re-list finds the card as before — success via the list',[absent.state,absent.readBack?.rows?.[0]?.foundBy,lagReads.length,absent.logs.some((l)=>l.includes('no annotation on run 42 names action 1 issue_create'))],['success','list',3,true],absent.logs.join(' | '));
t('unreadable (the jobs read answers 403): said, naming the call, and the list finds the card — never a failure',[unreadable.state,unreadable.annotations?.state,unreadable.readBack?.rows?.[0]?.foundBy,unreadable.logs.some((l)=>l.includes('could not be read')&&l.includes(JOBS)&&l.includes('HTTP 403'))],['success','unread','list',true],unreadable.logs.join(' | '));
t('an annotation whose url names another repository than the create landed on is ignored — said — and the list finds the card',[foreign.state,foreign.annotations?.rows,foreign.readBack?.rows?.[0]?.foundBy,foreign.logs.some((l)=>l.includes('is ignored')&&l.includes(`names ${UI}`))],['success',[],'list',true]);
1794
+
1795
+
// Past the cap: the platform keeps ten notices per step, so a later action may carry none — that one falls back alone.
t('two creates, only the first annotated: the first read at its number, the second found by the list — never the first one\'s issue again',[two.state,two.readBack?.rows?.map((r)=>[r.action,r.where,r.foundBy])],['success',[[1,`${REPO}#20998`,'annotation'],[2,`${REPO}#20999`,'list']]]);
t('a stroke with no op that creates or moves a card reads NO jobs and NO annotations',[plain.state,plain.annotations?.state,calls(plain,JOBS),calls(plain,NOTES)],['success','none',0,0]);
t('a transfer stroke reads them (it carries no body, so nothing is read back) and hands its row on for issue-transfer',[move.state,move.readBack?.state,move.annotations?.rows],['success','none',[{action: 1,op: 'transfer',number: 31,url: `https://github.test/${UI}/issues/31`,repo: UI}]]);
'the matcher: an identical repeat is one row; an index holding another op, or no action, is ignored; two DIFFERENT rows for one action are both ignored — a reader never picks between two answers',
t('a job\'s check run id: from its check_run_url, else its own id, else none',[checkRunIdOf(JOB),checkRunIdOf({id: 77}),checkRunIdOf({})],[4200,77,null]);
1814
+
1815
+
// The CLI: --json carries the numbers a seat could not read before, and how each read-back found its object.
t('the CLI: exit 0, and --json names the annotated number and url and that the read-back found it by the annotation',[code,json?.annotations,json?.read_back?.[0]?.found_by],[EXIT_OK,[{action: 1,op: 'issue_create',number: 20998,url: URL98}],'annotation']);
1834
+
}
1835
+
1725
1836
// ── the wiring ──────────────────────────────────────────────────────────
1726
1837
battery('the wiring: the POST is paced and on the roster, the reads are not, the token never reaches the log');
1727
1838
{
@@ -1803,7 +1914,7 @@ export async function selfTest() {
1803
1914
`✓ fleet-write/dispatch self-test: ${cases.length} cases pass across ${declared.length} batteries — the transport selector that never guesses, `+
1804
1915
'the session on the envelope, one paced dispatch per stroke, a run found by its request id and waited to its conclusion, both ceilings answered UNCONFIRMED and never retried, '+
1805
1916
'and every body read back after a success run — the card\'s 41,699 bytes byte-exact across every 16 KiB boundary, a corrupted read-back NOT STORED (exit 4), an unfound one UNCONFIRMED (6) '+
1806
-
'only after a lagging issue list was re-read on its bounded schedule, the create never re-sent.',
1917
+
"only after a lagging issue list was re-read on its bounded schedule — unless the run's annotation named the new number, which is read at once and never listed — the create never re-sent.",
0 commit comments