Repository navigation
hosting: pass_ct joins the verdict vocabulary -- the words, the steward, the rules mirror (Refs #5980) - #12792
Conversation
Summary by t27-beesChecked by the t27 compilert27c parse, parse-complete and typecheck on each changed .t27 file at
Read by the modelThis change introduces a new verdict word Worth a look
Read: 3 files, +13 -6, the whole diff. Head |
…er reds (#13257) * ci: clear three master reds from #13179 and #13175 (Refs #13179) - timeout_terminal.t27: drop the local `same` body, use std::mem::bytes_eq (duplicate-bodies: bytes_eq copied [12, 3] back to [11, 3]). - timeout_terminal.t27: replace the developer home path with a repo-relative one (scan: hardcoded developer home path). - igla-coder-kernels-literature.md: mark the three `tri papers` mentions "not built yet" (documented-commands ceiling back to 68). Same content as the two fix commits in #13211, applied unchanged so the later merge of that PR is clean on these hunks. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> * ledger: restore the five pass_ct blocker fields dropped by c15eabe The bless in c15eabe wrote the five pass_ct entries back with an empty blocker, undoing 5c74c06. loop-tools-gate asserts that every non-pass entry has a blocker and a known reason, so it is red on master since f451395 and on every PR touching specs/tri/t27b. The five strings are restored byte for byte from 5c74c06; nothing else changes. Refs #13184 * feat(t27os): Telegram account link contract specs/t27os/telegram_link.t27 states when a verified Telegram account may be bound to the current local profile: one profile, one fresh attempt, a 300 s deadline, a result taken once while pending, an explicit confirm that checks the attempt again, issuer and client binding, no automatic replacement of a linked subject, and an explicit unlink. Every end of an attempt clears its handle, so a late result is refused. 11 tests, sealed. No host call, UI, provider key or profile file format change. Closes #13255 Refs dmitrii-f-t27#17 * gen(t27b): regenerate gen/c/tri/t27b/steward.c from steward.t27 steward.t27 counts pass_ct as a pass since #12792, but steward.c was not regenerated, so the loop-tools gate check that gen/c/tri/t27b/steward.c is t27c gen-c specs/tri/t27b/steward.t27 byte for byte fails. On master it stayed hidden because the ledger step before it failed first. Regenerated with t27c built from e96c497; the diff is the three lines of the pass_ct branch. Refs #13184 * fix(t27os): name a linked account by issuer, client and subject (FR-002) A stored link was compared by subject alone. FR-002 names an account by issuer, configured client and verified subject together, and OIDC only makes sub unique within one issuer (one client with pairwise subjects), so the same subject under another issuer or client is another account: link_decision and link_confirm_candidate now take link_cfg for the stored link and return LINK_CONFLICT when it does not match. The comment no longer overstates the OIDC rule for sub, and the subject's character edges (33, 126, 32, 127) are tested. 12 tests, resealed. Refs #13255 --------- Co-authored-by: Dmitrii Vasilev <admin@t27.ai> Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com>
…test asks is_pass (Refs #12751) (#13097) Two parts, both needed. 1. gen/c/tri/t27b/steward.c was not regenerated when #12792 (37ca933) added `if (v == 12) { return true; }` (pass_ct) to is_pass in specs/tri/t27b/steward.t27. scripts/tri_loop/t27b_rules.py compiles and calls this C, so every consumer read is_pass(pass_ct) = false. Regenerated with: t27c gen-c specs/tri/t27b/steward.t27 > gen/c/tri/t27b/steward.c The output hashes d1941f3b..., the gen_hash_c already recorded in .trinity/seals/t27b_T27bSteward.json (spec_hash 8fa40d90... unchanged), so the seal is not re-saved. No hand edit of the generated file. 2. scripts/ci/test_a_t27b_spec_cannot_move_silently.py kept its own success list ("pass", "pass_vacuous") for the blocker-and-reason check, so the five pass_ct rows of the committed ledger (blocker "", as bless writes them) failed it. The check now skips the rows the spec's is_pass counts as a pass, read through t27b_rules. The cap check is unchanged: it still counts by the tuple, as bless (ledger_counts) does, 140 == 140. Foreign lines: +3 / -3 (net zero; the text/real lines are merged to pay for the import line). Controls (python3 3.14.6, one test file): regen C + patched test, real ledger all ok, rc 0 neg: blocked row with blocker "" FAIL blocker line, rc 1 neg: pass_ct row -> blocked, blocker "" FAIL blocker line, rc 1 stale C + patched test FAIL blocker line, rc 1 regen C + original test FAIL blocker line, rc 1 Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Refs #5980, #12751, #12788 (the pass_ct label in t27b), #12789 (the lab aggregates).
The three layers that name and judge a lab verdict learn the new word:
Verification (measured on this tree): row.t27 test-report 5 tests FAIL 0 (the numbering invariant carries TW_PASS_CT == 10 and T27B_VERDICTS == 11); steward.t27 137 tests FAIL 0; t27b_rules.py py_compile green. The word is appended, not inserted: no stored ledger code moves.