Repository navigation
Record E81: the release flow on a project on main - #175
Conversation
The release probe ran the whole flow on QA through #170's code: a project created on main, two releases prepared from main, one promoted, and a discard, leaving main the only branch. Moved here from #171, whose review packet these 89 recordings filled before the code. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01W8rv4ReoP1L2nPMnLBsw8k
Codex auto-review (local) —
|
Grok auto-review (local) —
|
| File | What is actually stored |
|---|---|
11-POST-contents-seed.json (whole file, 16 lines) |
No headers. Body is the prose stub [two books and metadata.json as base64]. Response is only commit.sha c9acaba290…. The branch is not in the file. |
34-POST-contents-change.json (same shape) |
Same stub. Response sha a7cf701557… only. This is the write README line 9 says was POST /contents on main. |
10 request body |
Entire body replaced by [28263 bytes omitted: file contents as base64]. The response trim of the license is what the README describes. |
49 request body |
Entire body replaced by [331601 bytes omitted…]. Response MAT/MRK lengths match the README. |
19, 44, 45 |
"archive_bytes": null on 200 zip responses. |
57-GET-sb-archive-after-release.json |
200 for …/sb/v1.1.0.zip stored as {"bytes": 2000} only. |
11 and 34 are the two writes onto main. A reader who believes the README cannot check which branch those POSTs named. The conclusion is not floating: 12 and 35 show latest on main at those shas with the books the README names. Say so, and name the real trim. One paragraph. Do not add a sixth special case later.
2. Medium — discard and "no phase failed" are outside this review copy. Class: unverified claim, not a demonstrated contradiction. Blocking for a Status: verified signature.
E81 (docs/evidence.md, the added paragraph at the hunk on line 463) says a v1.1.1 preparation was discarded, GET /branches lists main alone, and no phase failed. The README points that at 74 (DELETE, 204), 75, and summary.json. The diff ends in 59, which is the start of that phase (branch_count: 1, release_counter: 2, default_branch: "main" — before any v1.1.1 prepare). I do not have evidence for the discard sentences. I also do not have evidence they are false.
Blast radius: a future citation of E81 treats the discard-on-main half as observed. That is the point of this PR.
Exit condition: mergeable when (a) the README trim sentence lists the reductions in the table above, and (b) a review of the full tail shows 74 DELETE 204 of the v1.1.1 temp branch, 75 listing only main, summary.json with no failed phase, and no authorization value other than token [redacted]. If (b) is already true in the PR, it clears with no edit. (a) is an edit.
3. Low — /user/teams publishes a privilege map that this probe does not need. Class: HYGIENE / information disclosure. Follow-up, not a hold.
02 and 06 record tc-admin-qa as owner of BurritoTruck and as admin on bahtraku's Translators team (includes_all_repositories: true, visibility: "private"). Token and email are redacted, which is what E81 promised. The release claim only needs the tc-admin-qa-org Owners row. Next recording, keep that row and drop the other orgs. I am not holding this PR for it. Assumption: this repo is public, because the PR and the Actions URL are on public GitHub. If the repo is private, the blast radius is the people who can already read QA.
Questions
- The DCS string
28.1.0+dcs.19-g41cde8ce33appears in E81 and the README, not in any exchange through file 59. Ifsummary.jsoncarries it, that file was not in this copy. I do not have evidence for the server version beyond the prose. release-plan-2.jsonwas not in this copy. I want it to show source branchmainand heada7cf701557, with the temp branch still rooted ate3f3086e, so the message and the parent stay explicitly two different facts.
Verdict
Request changes. The create, the two releases, the promote, and the redaction I could see are in good shape. The evidence note overclaims how complete 11 and 34 are, and the discard half of Status: verified was not in the diff I reviewed. Exit condition is the two checks in issue 2. I did not re-execute the suite.
VERDICT: findings
Local grok --prompt-file (skill George preamble; no stamp), via the uw:grok-review skill.
|
unfoldingWord review bench — fix lane, round 1 on
Pushed Round 1 on 601f5f8: Frank is clean, and George raised 3 issues and 2 questions. I fixed George #1 (Medium) in commit d4e2ccf: the README now lists every reduction in the recordings, the body, archive and header omissions included. I refuted George #2 using 74, 75 and summary.json: the discard and the main-only branch list are recorded, and no step failed. I deferred George #3 (Low, the teams privilege map) and answered both questions from the files. The docs check was refused by the permission layer and did not run; the change is Markdown only. Nothing was pushed. |
Codex auto-review (local) —
|
Grok auto-review (local) —
|
uwreview
left a comment
There was a problem hiding this comment.
Verdict: approve
This PR was built with Claude (builders: claude), so under RULINGS D13 the bench's Claude pass does not review it. The gate is the independent reviewers on d4e2ccf0d: Frank (Codex) clean and George (Grok) findings, with 4 finding(s) on the disposition record and 0 still open and blocking. Tier T2 (declared none, derived T2).
Frank (Codex) on d4e2ccf0d
Codex auto-review (local) — d4e2ccf0d
Approve at d4e2ccf0dca70780c3ad3168168e0a8ae6afe79e; no blocking findings.
- Summary / strengths: E81’s core claims match the recorded creation on
main, release, promotion, and discard results. All 89 JSON fixtures parse; all 75 exchange statuses match the summary. - P3 · HYGIENE · nonblocking: README.md:7 calls fixture
57’s value the archive size. Evidence:bytes: 2000comes from the recorder’s truncated text preview length. Verification method: inspected the fixture and recorder at lines 126 and 301. Confidence: high. Blast radius is documentation accuracy only. Follow-up owner: PR author; describe the value as a truncated preview length and archive size as unknown. - Verification limits: Documentation checks pass.
npm run checkstopped becauseoxlintis unavailable; typechecks and tests did not run. Approval is inspection-based; the live probe was not repeated. - Questions: None.
VERDICT: clean
Local codex exec (skill Frank preamble; no stamp), via the uw codex-review skill.
George (Grok) on d4e2ccf0d
Grok auto-review (local) — d4e2ccf0d
The review packet was cut off mid-recording. I'll read the rest of the diff before judging whether E81's claims match the fixtures at d4e2ccf.The packet still stops inside file 59. I'll check the README fix against the exchanges I can see, and the release calls that are actually in this copy.## Review — PR 175, head d4e2ccf0dca70780c3ad3168168e0a8ae6afe79e
Inspection-based. I did not re-run npm run check. The CI row on this head is still pending. Round 1's README gap is fixed in the files I can see. The discard half of Status: verified is still not in this copy: the diff stops inside 59-GET-repos_tc-admin-qa-org_id_tcar0228.json. Files 60–75, summary.json, seed-receipt.json, and the release-plan-* / preparation-discard-* sidecars are absent. The fix-lane comment says it read them at 601f5f8d8. That comment is not the recording. I do not have evidence those sentences are false, and I will not sign them from the comment.
Frank's clean review was on 601f5f8d8 and says he parsed all 89 fixtures. I agree with him on the create, both releases, the promote, and the redaction through file 57. I do not agree this copy is enough to call E81 verified end to end.
Strengths
- The README now says what the visible files actually store.
10and49request bodies are length stubs ([28263 bytes omitted…],[331601 bytes omitted…]). The license in10and MAT/MRK in49are length stubs;metadata.jsonandREADME.mdstay inline.19,44, and45arearchive_bytes: null.57is{"bytes": 2000}and has no headers.11,12,33,34, and35have no headers.11and34keep the URL, a prose body, status 201, and the commit sha. That matches the new bullets. I am not opening a sixth trim case. - Create is on
mainin the request.09posts"default_branch":"main"and the 201 answersdefault_branch: "main".04and08are 404. - Catalog
latestagrees with the shas E81 names.12hasmainatc9acaba290…with MAT and JHN. After the promote,33hasprod=v1.0.0ate3f3086e…andlateststillmainatc9acaba290….35haslatest=mainata7cf701557…with MAT (148038), JHN, and MRK (97541), andprodstillv1.0.0. - The release calls match the prose.
21branchestemp-tca-release/v1.0.0fromc9acaba290….22commitsPrepared by tC Admin 0.1.0 from main at c9acaba290.with parentc9acaba290….27createsv1.0.0withprerelease: true(201);30shows that tag onpreprodandprod: null.32PATCHes{"prerelease":false}and the 200 isprerelease: false, stageprod.48branchestemp-tca-release/v1.1.0frome3f3086e…(thev1.0.0snapshot, notmain's tip).49's parent is that same sha, and the message says prepared frommainata7cf701557. Same split E80 already records.54createsv1.1.0withprerelease: false(201) atbefdb4fa…, body citinga7cf701557onmain, added MRK, revised MAT, JHN carried forward.28and55delete the temp branches at 204. - Auth headers in
01–58aretoken [redacted]. Emails are[redacted]. No Pendau GET appears in01–11. The traceability edit is one cell, E81 on the#170row.
Issues
1. Medium — discard, "no phase failed", and the README's "no others" tail are outside this copy. Class: unverified claim on a Status: verified sentence. Not a demonstrated contradiction. Blocking for that signature.
docs/evidence.md (E81, the added paragraph) says a v1.1.1 preparation was discarded, GET /branches lists main alone, no phase failed, and names DCS 28.1.0+dcs.19-g41cde8ce33. fixtures/door43/qa.door43.org/2026-10-10/release-flow/README.md:3 and the discard row say 66 and 67 are archive_bytes: null, 71's body is a length stub, 75 has no headers, 74 is a 204 DELETE, and 75 lists only main, and that no other reduction exists. 59 is the start of that phase: branch_count: 1, release_counter: 2, default_branch: "main", before any v1.1.1 prepare. The DCS string is not in any exchange through 59.
Blast radius: a later citation treats the discard-on-main half as observed. That is what this PR is for. Round 1's exit (a), the README trim list, is met for 01–57. Exit (b) is not met in this packet. This is the second time that tail has been missing. I am not adding another point fix on top of the README.
Exit condition: mergeable when a review of the full tail shows 74 DELETE 204 of temp-tca-release/v1.1.1 with token [redacted], 75 listing only main, summary.json with no failed phase, the README sentences for 66, 67, 71, and 75 matching those files, and no authorization value other than token [redacted]. If that is already true, it clears with no edit. The fix-lane comment does not clear it.
2. Low — /user/teams still publishes a privilege map this probe does not need. Class: HYGIENE. Follow-up, not a hold.
Same finding as round 1, still open, still not a merge block. 02 and 06 record tc-admin-qa as owner of BurritoTruck and as admin on bahtraku's Translators team (includes_all_repositories: true, visibility: "private"). Token and email are redacted. The release claim only needs the tc-admin-qa-org Owners row. Next recording, keep that row. Assumption: this repo is public, because the PR and the Actions URL are on public GitHub. If it is private, the blast radius is people who can already read QA.
Questions
release-plan-2.jsonis not in this copy. I still want source branchmainand heada7cf701557recorded separately from the temp branch rooted ate3f3086e. The fix lane says the file does that. I have not seen it.summary.json'sdcs_versionis the only place the server string can live, and that file is not here.
Verdict
Request changes. The README fix holds for every reduction I can see, and the create, both releases, the promote, and the redaction through 57 are in good shape. I will not sign E81's discard, the "no phase failed" line, or the README's "no others" claim while 60–75 and the sidecars are missing from the review copy. Exit condition is issue 1. I did not re-execute the suite.
VERDICT: findings
Local grok --prompt-file (skill George preamble; no stamp), via the uw:grok-review skill.
Disposition record
- [blocking] george ·
fixtures/door43/qa.door43.org/2026-10-10/release-flow/README.md:3 — HYGIENE: the README's recording sentence names only the license/MAT/MRK trims; the files also omit request bodies, archives, and headers, and 11/34 do not record the branch they wrote. → fixed - [blocking] george ·
docs/evidence.md:467 — QUESTION: E81's discard, 'GET /branches lists main alone' and 'no phase failed' were outside George's truncated review copy; he flagged them as unverified. → refuted - [follow-up] george ·
fixtures/door43/qa.door43.org/2026-10-10/release-flow/tc-admin-qa-org/02-GET-user_teams.json— HYGIENE: the /user/teams recordings (02, 06) publish the test user's teams in other orgs, which the probe does not need. → deferred - [follow-up] george ·
fixtures/door43/qa.door43.org/2026-10-10/release-flow/tc-admin-qa-org/release-plan-2.json:7 — QUESTION: does release-plan-2 show source branch main and head a7cf701557, separate from the temp branch rooted at e3f3086e? → dispositioned
Checked
- reviewers: Frank clean · George findings (required: Frank and George; RULINGS D13/D16); the Claude pass was not run — Claude built this PR
- what this approval does not cover: nothing here was verified by an independent Claude read; it rests on the two reviewers and the gate
This approval covers d4e2ccf0d only. A push after it restarts review — please hold pushes to this branch until it is merged, unless it needs changes.
unfoldingWord review bench (uwreview) — gate: checks=pass · Frank=clean · George=findings · tier=uW T2 · builders=claude · head d4e2ccf0d (RULINGS D6/D12/D13). The merge stays a human act.
|
Author's check of George's round 2 exit condition at
Frank's P3 note (round 2) is correct.
Not merged. This pull request is over 800 changed lines, so AGENTS.md needs both reviewers clean, and George's copy cannot hold the recordings' tail. Whether to accept this check or to reduce the recordings so his copy holds them all is Rich's call. I have not pushed again tonight, since another round would be cut off at the same place. |
|
Rich chose to accept the author's check of the recordings' tail (comment above) and merge at |
What changes
Records E81: the release flow ran on QA through #170's code, on a project created on
main. Refs #170.This was part of #171 until AGENTS.md's size rule moved it out. A pull request over 800 changed lines needs both reviewers clean, and these 89 recorded files (about 11,000 lines) filled George's review copy before #171's code three rounds running. #171 merged without them. This pull request is evidence only:
docs/evidence.md, one citation indocs/traceability.md, and the recordings with their README.What E81 says
scripts/probe/qa-release-probe.mjs --owner tc-admin-qa-orgran on QA (DCS28.1.0+dcs.19) on 10 October 2026:project.create.applycreatedtc-admin-qa-org/id_tcar0228onmain.bahtraku/Perjanjian-Baru-Pendauat the branch that repository's read names, and committed them tomain. That read is not recorded; E14's recording shows Pendau'sdefault_branchismaster.release.plantook the branch from the repository'sdefault_branch,main. Both release commits say "Prepared by tC Admin 0.1.0 from main at …".v1.0.0was made a pre-release, then promoted;v1.1.0was released.v1.1.1preparation was discarded, leavingmainthe only branch.Recordings: the token and every email are redacted. Base64 file content over 4,000 characters is replaced by its length (the license in
10, MAT and MRK in49).Invariants
None touched: evidence only. The run exercised R3, R5, R7, and R8 as E54 did.
Evidence
Verification
npm run checkexits 0 (docs check, lint, typecheck, tests).Documents updated
🤖 Generated with Claude Code
https://claude.ai/code/session_01W8rv4ReoP1L2nPMnLBsw8k